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