为什么call_user_func和call_user_func_array()返回类型之间存在差异

时间:2018-06-22 09:43:56

标签: php callback

当我偶然发现返回类型的差异以前对我来说并不明显时,我试图在方法call_user_func()call_user_func_array()之间取得明显的区别。请考虑类 Test < / strong>,并使用方法dnd($t)

class Test {
function dnd($t) {
    echo "<pre>";
    var_dump($t);
    echo "</pre>";
  }
 }

实例化:

$obj = new Test();
$params = [33,22,'fff'];

现在通过call_user_func方法调用

call_user_func([$obj,'dnd'], $params);

结果是:

array(3) {
 [0]=>
     int(33)
 [1]=>
     int(22)
 [2]=>
     string(3) "fff"
 }

当call_user_func_array时:

call_user_func_array([$obj,'dnd'], $params);

产量:

int(33)

为什么会有这种变化以及它对传递给函数的参数或依赖参数的函数调用有什么影响?

1 个答案:

答案 0 :(得分:4)

  

call_user_func([$ obj,'dnd'],$ params)

此解决

$obj->dnd(array(33, 22, 'fff'))

同时

  

call_user_func_array([$ obj,'dnd'],$ params)

解析为

$obj->dnd(33, 22, 'fff')