我们何时需要通过引用函数创建传递/调用

时间:2011-03-23 10:31:59

标签: php

我是否总是在混淆是否通过引用函数创建传递/调用。如果有人可以解释我应该何时使用它和一些现实的例子,那将是很棒的。

4 个答案:

答案 0 :(得分:3)

在其他语言中通过引用(或指针)调用的一个常见原因是节省空间 - 但PHP足够聪明,可以为声明为值传递(副本)的参数实现写时复制。还有一些隐藏的语义奇怪 - 虽然PHP5引入了始终通过引用传递对象的做法,但数组值始终存储为引用,call_user_func()始终按值调用 - 从不通过引用(因为它本身是函数 - 而不是构造)。

但这是原问题的补充。

一般来说,除非在调用的功能返回后明确要求值不同,否则总是将代码声明为传递值(复制)。原因是您应该知道调用的功能如何改变您当前编写的代码的状态。这些概念通常被称为关注点的隔离和分离。

答案 1 :(得分:2)

从PHP 5开始,没有任何理由通过引用传递值。

一个例外是如果您想要就地修改数组。以sort函数为例。您可以看到数组是通过引用传递的,这意味着数组已就地排序(不返回新数组)。

或者考虑一个递归函数,其中每个调用都需要访问相同的数据(通常也是一个数组)。

答案 2 :(得分:0)

在php4中,它用于大变量。如果你在函数中传递了一个数组,那么使用大量内存和cpu复制数组以便在函数中使用。解决方案是:

function foo(&$arr)
{
  echo $arr['value'];
}
$arr = new array();
foo($arr);

这样你只传递了引用,一个指向数组的链接并保存了内存和cpu。由于php5每个对象和数组(不确定像int这样的标量)是通过内部引用传递的,所以没有必要自己做。

答案 3 :(得分:0)

当函数总是返回传递给同一变量的变量的修改版本时,这是最好的

 
$var = modify($var); 
function modify($var)
{
return $var.'ret'; 
}

如果你总是返回传递的变量,使用引用很棒。

此外,在处理大变量尤其是数组时,最好在可行的情况下通过引用传递。这有助于节省内存。

通常,我在处理数组时通过引用传递,因为我通常会将修改后的数组返回到原始数组。