<?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编写的手册是“当将已经创建的类实例分配给新变量时,新变量将访问与分配的对象相同的实例。这种行为是相同的将实例传递给函数。“
任何人都可以解释一下吗?
答案 0 :(得分:0)
$ instance = null; // $ instance和$ reference变为null
此时您已将其与对象取消链接。就这样。该对象不会被删除,因为我们有另一个链接到它的变量。
此外,使用var_dump($ GLOBALS),您可以看到$ assigned和$ instance&amp;之间的差异。 $ reference pair。
答案 1 :(得分:0)
下面的内容来自PHP手册Object and reference
PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP 5开始,对象变量不再包含对象本身作为值。 它只包含一个允许对象访问者查找实际对象的对象标识符。当一个对象通过参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们拥有一个副本标识符,指向同一个对象。