PHP: Referenz einer Klasse in einer anderen Klasse benutzen
kleinerChemiker 16.03.2010 - 20:52 2433 6
kleinerChemiker
Here to stay
|
$a = new aclass();
$b = new bclass($a);
Wie mache ich es jetzt, daß ich in bclass die aclass als Referenz nutzen kann? Muß das dann so aussehen: $b = new blcass(&$a);
Und wie spreche ich die Klasse aclass innerhalb bclass an? Oder muß ich das über einen Konstruktor lösen? Oder geht das überhaupt gar nicht? tia
|
Spikx
My Little Pwny
|
Einfach im Konstruktor von bclass die Referenz festlegen, so wie bei jeder normalen Funktion class bclass
{
bclass(&$a)
{
$a->foo();
}
}
|
Neo1010
.
|
hmm also angenommen du hast in der klasse a die methode doIt();
einfach
$a = new a(); $b = new b(a);
a{ doIt(){} }
b{ public a; construct(a){ $this->a = a; } }
und dann $b->a->doIt();
Hoffe du meinst das so
|
kleinerChemiker
Here to stay
|
danke. D.h. das wäre korrekt? Handelt sich auch um PHP5. class bclass
{
function __construct(&$aaa)
{
}
function test()
{
$aaa->foo();
}
}
Also kann ich aclass überall innerhalb von bclass mit $aaa (also dem Namen, den es im Konstruktor bekommt) ansprechen? Und eine erwähnung wie folgt ist nicht nötig/üblich/erlaubt. class bclass
{
private $aaa;
function __construct(&$aaa)
{
}
function test()
{
$aaa->foo();
}
}
Bearbeitet von kleinerChemiker am 16.03.2010, 21:04
|
mat
AdministratorLegends never die
|
Objekte werden in PHP5 immer wie eine Referenz behandelt, die Object-Variable selbst ist nur ein Identifier. Hier gibt es ein paar Beispiele was so ca. möglich ist. Deine Beispiele sind komplett falsch. Erstens fehlt überall das $this-> um die Variable auch wirklich anzusprechen und zweitens musst du im Constructor noch die übergebene Variable der Member-Variable zuordnen. Das Reference-Sign ist bei Objekten in deinem Fall nicht notwendig. Außerdem wirst du langfristig Probleme mit "allow_call_time_pass_reference" bekommen ...
|
kleinerChemiker
Here to stay
|
Ok, danke. D.h. ich übergebe die Klasse ganz normal und erzeuge damit sowieso keine Kopie und damit nicht mehr Speicher. Also muß ich die Klasse, die ich übergebe, extra noch einer Variablen im Konstruktor zuweisen und immer mit $this-> ansprechen.
|
mat
AdministratorLegends never die
|
Du übergibst die Instanz eines Objects, bzw. den Identifier auf die Instanz eines Objects. ![;)](/images/smilies/wink.gif) Ja, du musst die Member-Variablen natürlich stets zuweisen. Das wird nicht automatisch für dich erledigt.
|