0

我知道在函数参数之前使用 & 意味着它是通过引用传递的,并且可以用于输出,但是如果我在另一个上下文中使用它意味着什么?

例如:

function foo (&$param) {
    $param = 3;
}

foo (&$a);
echo $a;

我在调用 foo 时添加了 & 只是为了看看会发生什么,它实际上似乎并没有改变任何东西,并且 $a 在此之前甚至没有定义。

谁能解释一下?

4

3 回答 3

7

手册说:

注意:函数调用上没有参考符号 - 仅在函数定义上。仅函数定义就足以通过引用正确传递参数。&从 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 的这个方面严重降低了.

于 2012-08-06T13:03:53.600 回答
3

当您&$param在函数中使用时,这意味着您通过引用传递。但是你不应该在函数调用中使用它——在当前版本的 PHP 中,这会产生一个警告。函数调用现在只允许传递一个变量。函数声明必须表明函数是通过引用还是通过传递来接受参数。

根据文档传递它,functionName($variableName);而不是functionName(&$variableName)

使用&$参数调用的函数现在会生成一个警告,该警告可以被抑制,但仍然是一种贬低的调用方式。

于 2012-08-06T13:03:45.933 回答
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;

?> 简单来说,上面的 $nvariable 是普通变量,当它回显时,它会采用最初设置的 $variable 的值。现在考虑 $refvariable ,它是引用变量,它采用 $variable 的最新值。希望上面的例子能帮助你理解。

于 2012-08-06T13:08:54.863 回答