为什么按引用传递不会更改变量的值?


$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(( 函数不支持通过引用传递?

最新更新