这使您可以通过引用允许您修改原始变量的函数或元素来传递变量。
通过引用传递不仅限于变量,还可以通过引用传递以下内容:
新声明,例如 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开始,调用时传递引用被删除,因此使用它会引发致命错误。