【问题标题】:PHP5 - Object assignment issuePHP5 - 对象分配问题
【发布时间】:2012-06-13 15:10:44
【问题描述】:
<?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"
}

对于$instance$reference,我可以理解NULL,但是为什么$assigned 没有变成NULL。 根据我在 PHP 5 中的理解,对象是通过引用传递的,所以 $assigned 也包含引用,在这种情况下它也应该成为 NULL

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

谁能解释一下?

【问题讨论】:

    标签: reference php-5.3 variable-assignment instantiation


    【解决方案1】:

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

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

    此外,使用 var_dump($GLOBALS) 您可以看到 $assigned 和 $instance & $reference 对之间的区别。

    【讨论】:

      【解决方案2】:

      下面一行来自 PHP 手册Object and reference

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        相关资源
        最近更新 更多