我知道使用&在函数的参数之前意味着它通过引用传递,并且可以用于输出,但是如果我在另一个上下文中使用它意味着什么呢?
例如:
function foo (&$param) {
$param = 3;
}
foo (&$a);
echo $a;
我添加了&当调用foo只是为了看看会发生什么,并且它实际上似乎没有改变任何东西,并且在该点之前甚至没有定义$ a。
有人可以解释一下吗?
答案 0 :(得分:7)
注意:函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,当您在
&
中使用foo(&$a);
时,系统会收到一条警告,指出“调用时间传递参考”已被弃用。
此外,从5.4.0开始,您实际上会得到一个解析错误。在此之前它会起作用,但自5.3以来它会抱怨。由于有些本机函数实际上需要调用时间传递引用(例如debug_zval_dump()
以及call_user_func()
和call_user_func_array()
下方)5.4的这一方面严重降低 。
答案 1 :(得分:3)
在函数中使用&$param
时,它意味着您通过引用传递。但是,您不应该在函数调用中使用它 - 使用当前版本的PHP,这将生成警告。函数调用现在只允许传递变量。函数声明必须指示函数是通过引用还是通过传递来接受参数。
按照文档functionName($variableName);
而不是functionName(&$variableName)
使用&$
参数调用的函数现在将生成一个警告,该警告可以被抑制,但仍然是一种折旧的调用方式。
答案 2 :(得分:0)
考虑下面的代码,这可能无法解答您的问题,但是了解引用变量的一个很好的示例。
<?
$variable="this is some test";
$refvariable = &$variable;
$nvariable = $variable;
$variable ="This IS ANOTHER VARIABLE STRING";
echo "Referenced Variable=".$refvariable;
echo "<bR>Normal Variable=".$nvariable;
&GT?; 简单来说,$ nvariable以上是正常变量,当它回显时,它最初采用$ variable设置的值。现在考虑引用变量$ refvariable,它取$ variable的最新值。 希望上面的例子可以帮助你理解。