call_user_func与call_user_func_array

这两个函数的作用是一样的,都是通过函数名(或方法名)来调用函数(或方法),并传入参数的,只是用法略有差别。

call_user_func传参的时候用的是一个一个的字符串,用来分割,也可以用...$arg这种语法结构来用。
call_user_func_array传参的时候用的是一个数组。
请看代码:

function aa($value='')
{
    echo "aa: ".$value;
}

call_user_func('aa','123');
echo "<br>";
call_user_func_array('aa',['123']);
echo "<br>";

class TestClass
{
    static public function testAa($value='',$value2='')
    {
        echo "testAa: ".$value.','.$value2;
    }

    static private function testBb($value='')
    {
        echo "testBb: ".$value.','.$value2;
    }
}

call_user_func(['TestClass','testAa'] , '123','789');
echo "<br>";
call_user_func_array(['TestClass','testAa'] , ['123','789']);
echo "<br>";

call_user_func(function($data){
    echo 'closures: '.$data;
},'aaaa');
echo "<br>";

执行结果是这样:

aa: 123
aa: 123
testAa: 123,789
testAa: 123,789
closures: aaaa