将类的实例分配给php中的新对象

tin*_*bai 5 php

以下是手册中的示例:

<?php

    $instance = new SimpleClass();
    $assigned   =  $instance;
    $reference  =& $instance;

    $instance->var = '$assigned will have this value';
    $instance = null; // $instance and $reference become null

    var_dump($instance);
    var_dump($reference);
    var_dump($assigned);
 ?>
Run Code Online (Sandbox Code Playgroud)

我无法理解结果:

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned will have this value"
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我答案,我认为这三个变量指向同一个实例。

web*_*ave 3

$instance = new SimpleClass(); // create instance
$assigned   =  $instance; // assign *identifier* to $assigned
$reference  =& $instance; // assign *reference* to $reference 

$instance->var = '$assigned will have this value';
$instance = null; // change $instance to null (as well as any variables that reference same)
Run Code Online (Sandbox Code Playgroud)

通过引用分配和通过标识符分配是不同的。从手册中:

经常提到的 PHP5 OOP 的要点之一是“默认情况下通过引用传递对象”。这并不完全正确。本节使用一些示例来纠正这种一般想法。

PHP 引用是一个别名,它允许两个不同的变量写入相同的值。从 PHP5 开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问器找到实际的对象。当一个对象通过参数发送、返回或分配给另一个变量时,不同的变量不是别名:它们保存标识符的副本,该副本指向同一个对象。

查看此答案以获取更多信息。