Hello,
[...] Einfache Datentypen werden grundsätzlich als Kopie übergeben. Es sei denn --wie schon beschrieben-- du möchtest, dass du an der einen Stelle mitbekommst, wenn an anderer Stelle etwas mit dem Wert geschehen ist. Der Effekt ist ein ähnlicher, wie bei globalen Variablen.
Nein, der Effekt ist ein ganz anderer. Ob ich ein Call by additonal Displacement (Konstante) oder ein Cal by Reference (variables Displacement, variabler Offset) durchführe, ist ein himmelweiter Unterschied. Der entscheidet nämlich über die Reentranzfähigkeit des Codes.
Fall 1.:
-----------------------------------------------
class A
{
var $Ref = '';
function A( & $ref )
{
$this->Ref =& $ref;
}
}
$x = 'foo';
$obj = new A( $x );
print_r( $obj->Ref );
echo "\n";
$x = 'bar';
print_r( $obj->Ref );
echo "\n";
-----------------------------------------------
Hier hat die Eigenschaft Ref erstmal den Wert 'foo' und dann 'bar'.
Fall 2:
----------------------------------------------
class B
{
var $Ref = '';
function B( )
{
global $x;
$this->Ref =& $x;
}
}
$x = 'foo';
$obj = new B( );
echo $obj->Ref, "\n";
$x = 'bar';
echo $obj->Ref, "\n";
----------------------------------------------
Hier hat die Konstante Ref ebenfalls erst den Wert 'foo' und dann 'bar'.
Gruss Martin