在 PHP 對象編程經(jīng)常提到的一個關(guān)鍵點是“默認情況下對象是通過引用傳遞的”。但其實這不是完全正確的。下面通過一些例子來說明。
PHP 的引用是別名,就是兩個不同的變量名字指向相同的內(nèi)容。在 PHP 中,一個對象變量不再保存整個對象的值。只是保存一個標識符來訪問真正的對象內(nèi)容。 當對象作為參數(shù)傳遞,作為結(jié)果返回,或者賦值給另外一個變量,另外一個變量跟原來的不是引用的關(guān)系,只是他們都保存著同一個標識符的拷貝,這個標識符指向同一個對象的真正內(nèi)容。
示例 #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