为什么pass-by-reference不会改变变量的值?

时间:2014-09-21 16:17:06

标签: php reference pass-by-reference

$string='string';
function change(&$str){
    $str='str';
}
call_user_func('change',$string);
echo $string;

输出为'string'。但$ str引用$ string,所以$ str中的更改也应该更改$ string?为什么价值仍然相同?

4 个答案:

答案 0 :(得分:2)

http://php.net/manual/en/function.call-user-func.php

清楚地提到 call_user_func()的参数不会通过引用传递。

答案 1 :(得分:2)

使用call_user_func()

是不可能的

来自PHP documentation

  

请注意,call_user_func()的参数不会通过引用传递。

那说你仍然可以使用call_user_func_array()。现在可以使用参考。这是你想要的代码:

function change(&$str)
{
    $str='str';
}

$string='string';
$parameters = array(&$string);
call_user_func_array('change',$parameters);
echo $string;

然而,此解决方案现已弃用。

你仍然可以摆脱call_user_func(),只需这样做:

function change(&$str)
{
    $str='str';
}

$string='string';
change($string);
echo $string;

答案 2 :(得分:1)

call_user_func没有通过引用传递。来自the PHP docs

  

请注意,call_user_func()的参数不会通过引用传递。

(另一方面,change($string)会按照您的预期提供"str"

进一步阅读:Why does PHP's call_user_func() function not support passing by reference?

答案 3 :(得分:1)

这是您的错误消息:

<br />
<b>Warning</b>:  Parameter 1 to change() expected to be a reference, value given on line <b>5</b>   

因为call_user_func不通过引用传递参数。

尝试像这样运行:

$string='string';
function change(&$str){
    $str='str';
}
change($string);
echo $string;