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

时间:2013-04-02 15:39:18

标签: php

以下是 manual 中的示例:

<?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);
 ?>

我无法理解结果:

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

任何人都可以告诉我答案,我认为三个var指向相同的实例。

1 个答案:

答案 0 :(得分:2)

$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)

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

  

经常提到的PHP5 OOP的一个关键点是   “默认情况下,对象通过引用传递”。这不完全   真正。本节使用一些例子来纠正这种普遍的想法。

     

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

查看this answer了解详情。