0
<?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,但是怎么没有变成。根据我在 PHP 5 中的理解,对象是通过引用传递的,所以也包含引用,在这种情况下它也应该变成.$instance$reference$assignedNULL$assignedNULL

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

谁能解释一下?

4

2 回答 2

0

$实例=空;// $instance 和 $reference 变为 null

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

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

于 2012-06-10T10:14:04.130 回答
0

下面的行来自 PHP 手册对象和参考

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

于 2012-06-13T09:02:42.647 回答