PHP: Referenz einer Klasse in einer anderen Klasse benutzen

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_referenz_einer_klasse_in_einer_anderen_klasse__214929/page_1 - zur Vollversion wechseln!


kleinerChemiker schrieb am 16.03.2010 um 20:52

Code: PHP
$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:

Code: PHP
$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 schrieb am 16.03.2010 um 20:56

Einfach im Konstruktor von bclass die Referenz festlegen, so wie bei jeder normalen Funktion

Code: PHP
class bclass
{
    bclass(&$a)
    {
        $a->foo();
    }
}


Neo1010 schrieb am 16.03.2010 um 20:57

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 schrieb am 16.03.2010 um 21:02

danke. D.h. das wäre korrekt? Handelt sich auch um PHP5.

Code: PHP
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.

Code: PHP
class bclass
{
  private $aaa;

  function __construct(&$aaa)
  {
  }

  function test() 
  {
  $aaa->foo();
  }
} 


mat schrieb am 17.03.2010 um 09:05

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 schrieb am 17.03.2010 um 13:54

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 schrieb am 18.03.2010 um 11:11

Du übergibst die Instanz eines Objects, bzw. den Identifier auf die Instanz eines Objects. ;)
Ja, du musst die Member-Variablen natürlich stets zuweisen. Das wird nicht automatisch für dich erledigt.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025