1. Przesłanie zmiennych przez wartość powoduje utworzenie lokalnych kopii w obrębie funkcji w efekcie czego wartości pierwotnych zmiennych się nie zmieniają.
2. Przesłanie zmiennych przez referencję powoduje przesłanie do funkcji adresu pierwotnych zmiennych zatem w efekcie wartości się zmieniają po wyjściu z funkcji, gdyż modyfikowane jest to co się znajduje pod tymi adresami w pamięci.
//The two are NOT meant to be the same. $c="King"; $d="Pretender to the Throne"; swapByValue($c, $d); swapByRef($c, $d); function swapByValue($x, $y){ $temp=$x; $x=$y; $y=$temp; //All this beautiful work will disappear //because it was done on COPIES of pointers. //The originals pointers still point as they did. } function swapByRef(&$x, &$y){ $temp=$x; $x=$y; $y=$temp; //Note the parameter list: now we switched 'em REAL good. }
To jest OK natomiast w manulau jest jednak coś takiego.
class A { public $foo = 1; } $a = new A; $b = $a; // $a and $b are copies of the same identifier // ($a) = ($b) = <id> $b->foo = 2; $e = new A; function foo($obj) { // ($obj) = ($e) = <id> $obj->foo = 2; } foo($e);
1. Dlaczego wyświetla 2 skoro $e był przesłany jako kopia ?
2. Dlaczego $a wyświetla 2 jeśli nie był przesłany przez referencję ?