"We are back" « oc.at

PHP: Referenz einer Klasse in einer anderen Klasse benutzen

kleinerChemiker 16.03.2010 - 20:52 2433 6
Posts

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
Einfach im Konstruktor von bclass die Referenz festlegen, so wie bei jeder normalen Funktion
Code: PHP
class bclass
{
    bclass(&$a)
    {
        $a->foo();
    }
}

Neo1010

.
Registered: May 2003
Location: -
Posts: 1212
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
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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();
  }
} 
Bearbeitet von kleinerChemiker am 16.03.2010, 21:04

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25520
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
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25520
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz