Korrekte Übergabe eine Objektaddresse

Unicate

Erfahrenes Mitglied
Also, eigentlich sollte das eine einfache Frage sein, allerdings bin ich mir nicht ganz sicher.
Ich habe ein Objekt CUser, welches das Objekt CMySQL braucht.
Da das Objekt bereits einmal instaziiert wurde, übergebe ich es dem CUser im Konstruktor, wo die instanz des erstellten Objektes KOPIERT wird, was ja eigentlich
sinnlose Speicherverschwendung ist.
Nun möchte ich also nur die Adresse übergeben aber mit dem Objekt arbeiten wie zuvor.
Bsp Bisher:
PHP:
$MYSQL = new CMySQL(und was dazu gehört);
$USER = new CUSER($MYSQL);
soll werden zu:
PHP:
$MYSQL = new CMySQL(und was dazu gehört);
$USER = new CUSER(&$MYSQL);

Ich möchte die übergebene Adresse nun wieder so verwenden, als ob ich sie kopiert hätte:
PHP:
// class CUser irgendeine Methode:
$this->MYSQL->Methode_von_CMySQL;

wie muss ich dazu die adresse empfangen?
PHP:
1. function CUser(*$MYSQL) // geht das überhaupt?
// oder
2. function CUSER($MYSQL) // dann mit $this->MYSQL = &$MYSQL
// oder gar
3. function CUSER(&$MYSQL)
es würden sicher alle funktionieren, aber bei welcher ist die garantie gegeben, das ich das Objekt so nutzen kann wie oben beschrieben und das ich es nicht kopiere?
 
3. function CUSER(&$MYSQL)

Nennt sich Call by Reference, dann kannst du die Funktion ganz normal aufrufen, und es wird keine Kopie erstellt.

Wäre für mich die sinnvollste...
 
Soweit so gut, das Objekt kann jetzt im Konstruktor verwendet werden.

Wie übergebe ich diese addresse nun einer Membervariablen von Klasse CUser?
etwas mit dieser funktionalität... funktioniert nur nicht so wies aussieht
PHP:
&this->MYSQL = &$MySQL
 
Ok, soweit kloar, aber kann ich dann das Objekt so:
PHP:
$this->MYSQL->methode()
benutzen?

weil eigentlich ist ja jetzt "nur" die adresse in $this->MySQL gespeichert.

Also ich kenns nur aus dem C++ und da müsste ich eine Methode etwa so:
Code:
*$this->MySQL->methode()
aufrufen.
 
Ich hab in PHP bisher ziemlich wenig mit Referenzen gearbeitet, aber im Grunde sollte das so funktionieren. Am besten probierst Du es einfach mal aus.
 
Zurück