Looking for php Keywords? Try Ask4Keywords

PHP 通过参考传递


这允许您通过引用传递变量来允许您修改原始变量的函数或元素。

传递引用不仅限于变量,以下内容也可以通过引用传递:

  • 新语句,例如foo(new SomeClass)
  • 从函数返回的引用

数组

“传递引用”的常见用法是修改数组中的初始值,而不是创建新数组或乱丢命名空间。传递引用就像使用& => &$myElement在变量前面/前缀一样简单。

下面是一个从数组中利用元素并简单地将1添加到其初始值的示例。

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

现在,当您利用$arr任何元素时,原始元素将随着引用的增加而更新。您可以通过以下方式验证:

print_r($arr);

注意

在循环中利用引用传递时应注意。在上面的循环结束时, $num仍然保存对数组的最后一个元素的引用。分配后循环将最终操纵最后一个数组元素!你可以通过unset()在循环后调用它来确保不会发生这种情况:

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

以上将确保您不会遇到任何问题。 StackOverflow上的这个问题中提供了与此相关的问题示例。


功能

传递引用的另一种常见用法是在函数内。修改原始变量非常简单:

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

可以通过echo显原始变量来验证。

echo $var;

有关函数的各种限制,如下面的PHP文档中所述:

注意:函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,当您在foo(&$ a);中使用&时,您将收到一条警告,指出“call-time pass-by-reference”已弃用。从PHP 5.4.0开始,删除了调用时传递引用,因此使用它会引发致命错误。