我在PHP Classes and Objects: The Basics上找到了以下示例,但我不明白后台发生了什么。
有一个说法:
将已创建的类实例分配给新变量时,新变量将访问与分配的对象相同的实例。将实例传递给函数时,此行为是相同的。可以通过克隆来制作已创建对象的副本。
我假设这是默认情况下通过引用传递对象的状态,所以clone
如果打算制作真实副本,应该这样做。(PHP 中没有浅拷贝。是的clone
,默认情况下有。)
考虑以下示例(从上面的链接复制):
<?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"
}
我不明白。
如果$assigned = $instance;
默认情况下是通过引用(别名)对对象进行分配,那么为什么$assigned
仍然是 的对象SimpleClass
持有$var
具有 that 的属性string
,而NULL
被分配给$instance
.