【发布时间】:2009-05-19 23:45:14
【问题描述】:
PHP5 使用“写入时复制”并通过引用传递导致性能损失大于收益,为什么我应该使用传递引用?除了会返回多个值的回调函数或您希望在以后不调用 set 函数的情况下更改属性的类(我知道这是不好的做法)之外,我还缺少它的用途吗?
【问题讨论】:
标签: php pass-by-reference
PHP5 使用“写入时复制”并通过引用传递导致性能损失大于收益,为什么我应该使用传递引用?除了会返回多个值的回调函数或您希望在以后不调用 set 函数的情况下更改属性的类(我知道这是不好的做法)之外,我还缺少它的用途吗?
【问题讨论】:
标签: php pass-by-reference
当您想要修改结果时,您可以使用传递引用,仅此而已。
请记住,PHP 中的对象总是通过引用传递。
就我个人而言,我发现 PHP 隐式复制值的系统(我想是为了防止意外修改)既麻烦又不直观,但我又开始使用强类型语言,这可能解释了这一点。但我发现对象与 PHP 的正常操作不同,这很有趣,我认为这证明 PHP 的隐式复制机制确实不是一个好的系统。
【讨论】:
填充数组的递归函数?记得写一次这样的东西。
拥有数百个部分填充数组的副本并在每个回合复制、拼接和连接部分是没有意义的。
【讨论】:
即使在传递对象时也有区别。
试试这个例子:
class Penguin { }
$a = new Penguin();
function one($a)
{
$a = null;
}
function two(&$a)
{
$a = null;
}
var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);
结果将是:
object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL
当您通过引用传递包含对对象的引用的变量时,您可以修改对该对象的引用。
【讨论】: