對(duì)象和引用

在 PHP 對(duì)象編程經(jīng)常提到的一個(gè)關(guān)鍵點(diǎn)是“默認(rèn)情況下對(duì)象是通過(guò)引用傳遞的”。但其實(shí)這不是完全正確的。下面通過(guò)一些例子來(lái)說(shuō)明。

PHP 的引用是別名,就是兩個(gè)不同的變量名字指向相同的內(nèi)容。在 PHP 中,一個(gè)對(duì)象變量不再保存整個(gè)對(duì)象的值。只是保存一個(gè)標(biāo)識(shí)符來(lái)訪問真正的對(duì)象內(nèi)容。 當(dāng)對(duì)象作為參數(shù)傳遞,作為結(jié)果返回,或者賦值給另外一個(gè)變量,另外一個(gè)變量跟原來(lái)的不是引用的關(guān)系,只是他們都保存著同一個(gè)標(biāo)識(shí)符的拷貝,這個(gè)標(biāo)識(shí)符指向同一個(gè)對(duì)象的真正內(nèi)容。

示例 #1 引用和對(duì)象

<?php
class {
    public 
$foo 1;
}  

$a = new A;
$b $a;     // $a ,$b都是同一個(gè)標(biāo)識(shí)符的拷貝
             // ($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";

?>

以上例程會(huì)輸出:

2
2
2