$string='string';
function change(&$str){
$str='str';
}
call_user_func('change',$string);
echo $string;
输出是"字符串"。 但是$str指的是$string,那么$str的变化也应该改变$string? 为什么值仍然相同?
这是不可能的 call_user_func()
:
从 PHP 文档中:
请注意,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;
http://php.net/manual/en/function.call-user-func.php
它清楚地提到 call_user_func(( 的参数不是通过引用传递的。
这是您的错误消息:
<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;
call_user_func
不 通过引用传递。从 PHP 文档中:
请注意,call_user_func(( 的参数不是通过引用传递的。
(另一方面,change($string)
如您所期望的那样提供"str"
(。
延伸阅读:为什么 PHP 的 call_user_func(( 函数不支持通过引用传递?