PHP中传值赋值运算将变量的值拷贝到新的变量中,所以改变其中一个不会影响另外一个。普通的传值赋值行为中有个例外就是对象赋值。
class SimpleClass{
public $var='';
}
$instance=newSimpleClass();
$assigned=$instance;
$reference=&$instance;
$instance->var='$assigned will have this value';
$instance=null;// $instance and $reference become nullvar_dump($instance);
var_dump($reference);
var_dump($assigned);
输出:
NULL
NULL
object(SimpleClass)#1 (1) {["var"]=>string(30) "$assigned will have this value"}
分析代码:
$instance=newSimpleClass();//新建实例,$instance指向这个对象
$assigned=$instance;//$assigned也指向$instance所指向的对象
$reference=&$instance;//$reference指向$instance
如图:
$instance->var='$assigned will have this value';//给对象的var属性赋值
$instance = null;//$instance指向空,而$assigned还指向对象
参考:
https://www.zhihu.com/question/35710455