在php5 的物件程式設計經常提到的一個關鍵點是「預設情況下物件是透過引用傳遞的」。但其實這不是完全正確的。下面透過一些例子來說明。
php的引用是別名,就是兩個不同的變數名字指向相同的內容。在php5,一個物件變數已經不再保存整個物件的值。只是保存一個標識符來存取真正的物件內容。 當物件作為參數傳遞,作為結果返回,或者賦值給另一個變量,另外一個變量跟原來的不是引用的關係,只是他們都保存著同一個標識符的拷貝,這個標識符指向同一個對象的真正內容。
Example #1 引用與物件
<?php class A { public $foo = 1; } $a = new A; $b = $a; // $a ,$b都是同一个标识符的拷贝 // ($a) = ($b) = <id> $b->foo = 2; echo $a->foo."\n"; $c = new A; $d = &$c; // $c ,$d是引用 // ($c,$d) = <id> $d->foo = 2; echo $c->foo."\n"; $e = new A; function foo($obj) { // ($obj) = ($e) = <id> $obj->foo = 2; } foo($e); echo $e->foo."\n"; ?>
以上程式會輸出:
2 2 2