$string='string';
function change(&$str){
$str='str';
}
call_user_func('change',$string);
echo $string;
输出为'string'。但$ str引用$ string,所以$ str中的更改也应该更改$ string?为什么价值仍然相同?
答案 0 :(得分:2)
http://php.net/manual/en/function.call-user-func.php
清楚地提到 call_user_func()的参数不会通过引用传递。
答案 1 :(得分:2)
使用call_user_func()
:
请注意,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;