Objekt im Konstruktur übergeben - Referenz?

Anna Bolika

Erfahrenes Mitglied
Wenn ich in im Konstruktur ein Objekt übergebe, dann handelt es sich (hab es getestet), um eine Referenz.

PHP:
$oReferenz->sRefTest = "987";

$oTest = new testobjekt($oReferenz);

echo $oReferenz->sRefTest; // hier wird "123" ausgegeben. $oReferenz wurde also als Referenz übergeben.

class testobjekt
{

function __construct($o)
{
$o->sRefTest = 123;
}


}

Dieses Verhalten wäre auch von mir beabsichtigt. Problem: Ich finde dazu nichts schriftliches und möchte nicht Lotto spielen. Weiß jemand etwas dazu?
 
Ja, es ist de facto so, dass eigentlich jede Programmiersprache Objekte als Referenz übergibt. Dies gilt auch für PHP.
 
Everything will be passed by value, with the exception of objects, which will then be passed via identifier.

Wobei das – noch mal technisch gesehen :D – wohl trotzdem unter call-by-value einzuordnen ist. Der Wert (value) einer Objektvariablen sind bloß nicht die Daten des Objekts, sondern der beschriebene object identifier (kann man sich als Integer vorstellen). Der wird aber ganz normal by-value kopiert wie etwa auch ein String oder ein Integer (skalare Werte).

Der Effekt ist eben, dass hier…

PHP:
function f(FooClass $obj) {
    $obj = null;
}

…nicht das übergebene Objekt zerstört werden kann. Hier wird lediglich der object identifier in $obj durch einen anderen Wert ersetzt.

Das funktioniert etwa auch in Java so.
 
Zurück