是否需要在php5中通过引用传递变量?

时间:2009-05-19 23:45:15

标签: php pass-by-reference

PHP5使用“写入时复制”并通过引用传递导致更多的性能损失而不是增益,为什么我应该使用pass-by-reference?除了回调函数之外,它将返回多个值或类的属性,你想要在不调用set函数的情况下进行改变(不好的做法,我知道),是否有一个我失踪的用途?

3 个答案:

答案 0 :(得分:3)

当您想要修改结果时,您可以使用pass-by-reference。这就是它的全部内容。

请记住,在PHP对象中始终传递引用。

就个人而言,我发现PHP的隐式复制值系统(我想防止意外修改)繁琐且不直观但后来我又开始使用强类型语言,这可能解释了这一点。但我觉得有趣的是,对象与PHP的正常操作不同,我认为PHP的隐式复制机制确实不是一个好的系统。

答案 1 :(得分:2)

填充数组的递归函数?记得写一次这样的东西。

部分填充阵列的数百份副本以及每一次复制,拼接和连接部件都没有意义。

答案 2 :(得分:0)

即使传递物体也存在差异。

试试这个例子:

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

当您通过引用传递包含对象引用的变量时,您可以修改对该对象的引用。