PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP call by reference und Klassen


Kinman
2008-11-19, 15:20:37
Hallo, ich habe eine kleine Frage zu PHP.
Und zwar wenn ich im Konstruktor einer Klasse ein Objekt als Referenz übergib und anschließend diesen Parameter in einer Klassenvariable speicher, was wird dann in die Klassenvariabel kopiert?

a.) Die Referenz auf das Objekt (so sollte es imho sein)
b.) eine Kopie des Objekts - unwahrscheinlich aber manchmal trau ich PHP alles zu

Danke, mfg Kinman

The_Invisible
2008-11-19, 16:54:13
hm, bin mir jetzt auch nicht 100pro sicher, aber muss man das nicht mit "obj = &refobj" zuweisen wenn man keine kopie haben möchte?

könnte man aber ganz einfach testen, einfach beim übergebenen objekt ne eigenschaft ändern und beim "original" nachschauen ob sich auch was geändert hat.

edit:

hä, gibts jetzt in php nur mehr referenzen oder stehe ich gerade auf ner leitung???


<?php

class A
{
var $wert;

function __construct()
{
$this->wert = "Test";
}
}

class B
{
var $ref;

function __construct(A $obj)
{
$ref = $obj;
$ref->wert = "Geht";
}
}

$A = new A;
echo $A->wert . "\n";

$B = new B($A);
echo $A->wert . "\n";

?>


Ausgabe:

Test
Geht


php-version ist 5.2.6

mfg

Kinman
2008-11-19, 17:57:55
Bei mir (PHP 4.3.10) kommt zweimal Test raus, allerdings hab ich den Code PHP4 tauglich machen müssen...

Was kommt so bei Dir raus?


<?php

class A
{
var $wert;

function A ()
{
$this->wert = "Test";
}
}

class B
{
var $ref;

function B ($obj)
{
$ref = $obj;
$ref->wert = "Geht";
}
}


$A = new A;
echo $A->wert . "\n";

$B = new B($A);
echo $A->wert . "\n";

?>


mfg Kinman

Expandable
2008-11-20, 07:37:52
Wenn ich mich recht entsinne, übergibt PHP4 Klassen als Funktionsparameter standardmäßig immer by value (also Kopie) wie C++, PHP5 immer by reference wie Java/C#. D.h. der PHP5-Fall läuft oben so, wie erwartet, der PHP4-Fall muss im Konstruktor &$obj übergeben.