先上两段代码
$a = $b = new stdClass();
$a->txt = '1111';
$b->txt = '2222';
echo $a->txt; // 输出2222
dump出来看,$a 就是 $b
$a = $b = ['txt' => 0];
$a['txt'] = '1111';
$b['txt'] = '2222';
echo $a['txt']; // 输出1111
dump出来看,$a 不是 $b
请问,如何解释这种现象?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP对数组有特殊的
写时复制机制,而对象是没有这个机制的。如果要让数组达到和对象一样的效果,可以使用引用完成。
第一个,
$a和$b是同一个对象,指向同一个地址,所以你就把它们看成同一个变量就好了。第二个,数组在php里是写时复制的,所以它们指向不同的地址,所以它们不是同一个变量。
楼主,改一改你的代码,第二种没看懂,代码不全啊,运行报错
https://www.bytelang.com/o/s/...
你这个是复制的 ,所以变量的地址都是一样的,因此修改数据都会修改一个地方。
因为数组默认是传值的,对象默认是传址。