$instance2
具有所述標識符的副本對象測試。因此,它包含與$instance1
相同的內容。 $instance3
包含對$instance1
的引用。所不同的是以下幾點:
$instance1 = new Test();
$instance2 = $instance1;
$instance3 = & $instance1;
var_dump($instance1 instanceof Test); // True
var_dump($instance2 instanceof Test); // True
var_dump($instance3 instanceof Test); // True
$instance3 = new AnotherTest();
var_dump($instance1 instanceof AnotherTest); // True
var_dump($instance2 instanceof AnotherTest); // False
var_dump($instance3 instanceof AnotherTest); // True
如果$instance1
被改變,而不是$instance3
同樣的輸出將被返回。
但是,如果我們做了以下內容:
$instance1 = new Test();
$instance2 = $instance1;
$instance3 = & $instance1;
$instance2 = new AnotherTest();
var_dump($instance1 instanceof AnotherTest); // False
var_dump($instance2 instanceof AnotherTest); // True
var_dump($instance3 instanceof AnotherTest); // False
所以:
可變至極的修改通過引用(使用&
操作數)創建已通過或變量至極它引用的,修改兩者,而複製變量的修改只修改給定變量。
不過,你必須記住,$instance1
什麼讓是對象的標識,所以:
$instance1 = new StdClass();
$instance2 = $instance1;
$instance1->my_property = 1;
var_dump($instance2); // Output: 1
希望它更清晰了。
你的例子很有意義,但你不應該在PHP中使用'指針'這個詞。 –
我使用了「poitner」這個詞,因爲它們之間的主要區別正是引擎如何處理它們......我不知道如何用不同的方式來描述它。 – Lumbendil
正確的術語是對象標識符:http://php.net/manual/en/language.oop5.references.php –