[PHP] 2 Verschillende classes gebruiken 1 zelfde classe

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
He!

Ik ben helemaal de weg kwijt en vergeten hoe het ookalweer was!

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?
class eerst{
var $blaat;

    function __construct($test)
    {
        $this->blaat = $test;
    }
}


class tweede {

    function __construct()
    {
        echo $this->blaat;
    }
}
class derde {

    function __construct()
    {
        echo $this->blaat;
    }
}



$naar = new eerst("jahoor");
$bb = new tweede();
$aa = new derde();
?>


ik wil hiermee een uitvoer krijgen als:
code:
1
2
jahoor
jahoor


dit is niet de oplossing:
PHP:
1
class tweede extends eerst{}

dan krijg je bij een nieuwe 'tweede' elke keer een nieuwe 'eerste'..

hoe ga ik mijn gewenste resultaat krijgen?
polymorfisme?

Acties:
  • 0 Henk 'm!

Verwijderd

Zoiets:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
class eerst{
    var $blaat;

    function __construct($test)
    {
        $this->blaat = $test;
    }
}

class tweede extends eerst {

}

class derde extends eerst {

}

$bb = new tweede("jahoor");
$aa = new derde("jahoor");
?>

Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
Hmm,

het gaat mij er juist om dat als ik 1 setting in 'eerste' doe, dat ik die setting gewoon uit 'aa' en 'bb' kan halen.

edit:

Waardoor 'aa' gewoon '$this->blaat' kan aanroepen en gebruiken!


Opzich is dit ook wel een stap beter dan wat ik had ($blaat in elke class apart opnemen) maar heb het liever nog een stap verder dus! :)

[ Voor 21% gewijzigd door Mir op 11-03-2005 13:33 ]


Acties:
  • 0 Henk 'm!

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022

tombo_inc

uhuh

Mir schreef op vrijdag 11 maart 2005 @ 13:17:
Hmm,

het gaat mij er juist om dat als ik 1 setting in 'eerste' doe, dat ik die setting gewoon uit 'aa' en 'bb' kan halen.

edit:

Waardoor 'aa' gewoon '$this->blaat' kan aanroepen en gebruiken!


Opzich is dit ook wel een stap beter dan wat ik had ($blaat in elke class apart opnemen) maar heb het liever nog een stap verder dus! :)
dat word denk ik moeilijk omdat php een kopie maakt van het object die je extend. als je dus in 'eerste' een member een waarde geeft, dan kun je die waarde niet uit 'tweede' halen omdat 'tweede' een kopie van 'eerste'+'tweede' is. de 'eerste' waarvan tweede uit voortkomt heeft dan dus helemaal geen waardes want het is een lege kopie. zo is het denk ik, maar ik kan me vergissen.

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


Acties:
  • 0 Henk 'm!

  • foske
  • Registratie: Juli 2001
  • Laatst online: 08:20
Je kan de instantie van de klasse eerst meesturen in de constructor van de tweede en derde? Dan kan je bij $blaat.

Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
Ja,

ik denk dat het maar zo moet:
PHP:
1
2
3
4
5
6
7
class tweede extends eerst{
var $_Class;
    function __Constructor(&$In){
        $this->_Class = &$In;
        echo $this->_Class->blaat;
    }
}


dit werkt, niet helemaal wat ik wilde omdat ik nu elkekeer mijn hoofdclass mee moet geven..
als iemand nog een idee heeft?

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class eerst{
var $blaat;

    function __construct($test)
    {
        $this->blaat = $test;
    }

    function getVal() {
        return $this->blaat;
    }
}

class derde {

    function __construct($naar)
    {
        echo $naar->getVal();
    }
}

$naar = new eerst("jahoor");
$aa = new derde($naar);
Zoiets?

edit:
Er was dacht ik toch wel een betere manier, maar ik kan alleen iets bedenken met static classes / methods...

[ Voor 23% gewijzigd door JHS op 11-03-2005 16:26 ]

DM!


Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Dat gaat natuurlijk niet werken zo :)

'$this' is een verwijzing naar de huidige instantie van de / een class.
$this in tweede verwijst dus naar de huidige instantie van tweede, $this in derde naar de huidige instantie van derde, etc.

Wat je wel kan doen is:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Class Eerste{
    var $blaat;

    function Eerste($test) {
        $this->blaat = $test;
    }
}

Class Tweede extends Eerste{
    var $parent;

    function Tweede($parent) {
        $this->parent = &$parent;
    }
}

Class Derde extends Eerste{
    var $blaat;

    function Derde($parent) {
        $this->parent = &$parent;
    }
}

$eerste = new Eerste("Dinges");
// Hier geef je de instantie van eerste mee waar je $blaat hebt geset
$tweede = new Tweede($eerste); 
$derde  = new Derde($eerste);


Niet helemaal volgens OO .. maar het werkt denk ik wel :) Ik pas deze constructie meestal toe als ik in het parent object een instantie van een child object aanmaak waar ik de huidige instantie van de parent nodig heb.

Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
PhoeniX- schreef op vrijdag 11 maart 2005 @ 16:40:
Dat gaat natuurlijk niet werken zo :)

'$this' is een verwijzing naar de huidige instantie van de / een class.
$this in tweede verwijst dus naar de huidige instantie van tweede, $this in derde naar de huidige instantie van derde, etc.

Wat je wel kan doen is:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Class Eerste{
    var $blaat;

    function Eerste($test) {
        $this->blaat = $test;
    }
}

Class Tweede extends Eerste{
    var $parent;

    function Tweede($parent) {
        $this->parent = &$parent;
    }
}

Class Derde extends Eerste{
    var $blaat;

    function Derde($parent) {
        $this->parent = &$parent;
    }
}

$eerste = new Eerste("Dinges");
// Hier geef je de instantie van eerste mee waar je $blaat hebt geset
$tweede = new Tweede($eerste); 
$derde  = new Derde($eerste);


Niet helemaal volgens OO .. maar het werkt denk ik wel :) Ik pas deze constructie meestal toe als ik in het parent object een instantie van een child object aanmaak waar ik de huidige instantie van de parent nodig heb.
Dit had ik dus al staan ;) :P

Maar idd, ik ga het ook zo doen..

Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Mir schreef op vrijdag 11 maart 2005 @ 16:51:
Dit had ik dus al staan ;) :P

Maar idd, ik ga het ook zo doen..
Volgens mij mistte je de referentie naar de instantie van het parentobject in je voorbeeld - ik maakte het er in ieder geval niet uit op :)

[ Voor 3% gewijzigd door PhoeniX- op 15-03-2005 16:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij is onderstaande wat netter. Op deze manier moet je bij de private variabele kunnen komen van je class 'eerst'

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class eerst
{ 
    private $blaat; 

    function __construct($test) 
    { 
        $this -> blaat = $test; 
    } 

    function GetBlaat ()
    {
        return $this -> blaat;
    }
} 

class tweede extends eerst
{ 
    function __construct() 
    { 
        echo GetBlaat(); 
    } 
} 

class derde extends eerst
{ 
    function __construct() 
    { 
        echo GetBlaat(); 
    } 
}

$naar = new eerst("jahoor"); 
$bb = new tweede(); 
$aa = new derde();


Ik heb het niet kunnen testen, maar zo ff snel uit mn blote hoofd zou dat goed moeten gaan...

edit:
O ja, dit is wel voor PHP5, waar was jij naar op zoek?

edit:
Laat maar, als je gebruik maakt van __construct moet het wel PHP5 zijn...

[ Voor 34% gewijzigd door Verwijderd op 15-03-2005 16:52 ]


Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
dat gaat niet werken, bij elke extend actie gaat hij een nieuwe instantie van eerst maken.
Hierdoor ben je je content kwijt van blaat.

overigens dien je GetBlaat() aanroepen dmv: $this->GetBlaat(); :)

je zal dus echt elke keer de reference van je 'eerst' mee moeten geven waardoor je ook de $blaat waarde bewaart!
Pagina: 1