Referenzen zurückgeben

hoctar

Erfahrenes Mitglied
Hallo :)
bei Joomla sehe ich öfters Methoden die wie folgt ausehen: &getInstance()
Diese Methode gibt ein Object zurück, nun frage ich mich wofür das '&' am Anfang steht. Klar es soll eine Referenz zurückgegeben werden, aber ist es denn nicht das Standardverhalten ? Werden Objekte nicht immer als Referenz zurückgegeben ?
 
Hallöle,
ich kenne die ganze Geschichte nur aus C++ und da handelt es sich um einen Adress-Operator. Der kann dann noch dereferenziert werden (mit *) wodurch ich auf den Wert einer Variablen zugreifen kann, deren Adresse vorher an den Zeiger übergeben wurde.
Würde also mal darauf tippen, dass es sich hier um ein Zeiger-Problem handelt.

Ob das so auch auf PHP zutrifft....bleibt offen ;)
 
Ab PHP5 ist der Reference nur bei neu erzeugten Objekten unnötig und erzeugt eine E_STRICT-Meldung. Bei der Weitergabe von Objekten zB. von einer Variable an eine andere oder aus einer Funktion heraus ist es weiterhin notwendig, wenn man auf daselbe Objekt anstatt auf das gleiche zugreifen will.

Eine Referenz in PHP erzeugt ein Alias in der Symbol-Tabelle zur Laufzeit. Mehr sind Referenzen in PHP eigentlich nicht.

Man spart sich dadurch aber die Zyklen für eine Deep-Copy.
 
PHP:
class A {

        var $obj;

        function __construct($obj) {
                $this->obj = $obj;
        }
        
        function &getObj() {
                return $this->obj;
        }
        
        function getObj2() {
                return $this->obj;
        }

}


class B {

        var $b = 'b';
        var $a = 'a';

}

$b = new B;
$a = new A($b);

$obj = $a->getObj();
$obj->b = '123';

$obj2 = $a->getObj2();
$obj2->a = 'abc';

echo '<pre>'; print_r($obj); echo '</pre>';
echo '<pre>'; print_r($obj2); echo '</pre>';

Also in diesem Beispiel unterscheide ich die beiden Mehoden &getObj() und getObj().
Beide geben eine Referenz zu Objekt B, somit ist das Resultat am Ende gleich, denn im Spiecher wurde stets auf ein und die selben Werte zurückgegriffen.

Was macht das '&' nun für ein unterschied ?
 
Du beschreibst hier ein Pass-by-Reference. Du übergibst ein bestehendes Objekt als Referenz an eine Funktion.

Das ist nicht das, was ich beschrieben habe.

Schau dir die Beschreibungen zu dem Thema an:

http://www.php.net/manual/en/language.references.whatdo.php
http://www.php.net/manual/en/language.references.pass.php
http://www.php.net/manual/en/language.references.return.php

Bitte auch in diesem Zusammenhang das hier lesen:

http://devzone.zend.com/article/1714-Whats-New-in-PHP-5#Heading3

Ich entschuldige mich, dein ursprüngliches Anliegen missverstanden zu haben.
 
Zurück