PHP5 - 对象分配问题

时间:2012-06-10 10:03:28

标签: reference php-5.3 variable-assignment instantiation

<?php
class SimpleClass
{
    public $var1;
}
$instance = new SimpleClass();
$assigned   =  $instance;
$reference  =& $instance;
$instance->var1 = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
exit;
?> 

任何人都可以帮忙吗?为什么上面代码的输出是:

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

我可以理解NULL$instance $reference,但$assigned未成为NULL的原因。 根据我在PHP 5中的理解,对象是通过引用传递的,因此$assigned也包含引用,在这种情况下它也应该成为NULL

除了我的理解之外,用PHP编写的手册是“当将已经创建的类实例分配给新变量时,新变量将访问与分配的对象相同的实例。这种行为是相同的将实例传递给函数。“

任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

  

$ instance = null; // $ instance和$ reference变为null

此时您已将其与对象取消链接。就这样。该对象不会被删除,因为我们有另一个链接到它的变量。

此外,使用var_dump($ GLOBALS),您可以看到$ assigned和$ instance&amp;之间的差异。 $ reference pair。

答案 1 :(得分:0)

下面的内容来自PHP手册Object and reference

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