【问题标题】:why pass-by-reference doesn't change the value of a variable?为什么引用传递不会改变变量的值?
【发布时间】:2014-11-15 15:51:21
【问题描述】:
$string='string';
function change(&$str){
    $str='str';
}
call_user_func('change',$string);
echo $string;

输出是'字符串'。但是 $str 指的是 $string ,所以 $str 的变化也应该改变 $string?为什么值还是一样的?

【问题讨论】:

    标签: php reference pass-by-reference


    【解决方案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?

    【讨论】:

      【解决方案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;
      

      【讨论】:

        【解决方案3】:

        这是您的错误消息:

        <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;
        

        【讨论】:

          【解决方案4】:

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

          明确提到call_user_func()的参数不是通过引用传递的。

          【讨论】:

            猜你喜欢
            • 2012-02-14
            • 2021-02-27
            • 1970-01-01
            • 1970-01-01
            • 2013-11-26
            • 1970-01-01
            • 2016-06-20
            • 1970-01-01
            • 2022-07-04
            相关资源
            最近更新 更多