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;
// 定义
function add(&$var) {
    $var++;
}
// 呼叫
add($var);

可以通过echo'ing the original variable来验证。

echo $var;

有关功能的各种限制,如下PHP文档所述:

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