php中的call_user_func和call_user_fu

2017-03-15  本文已影响0人  EdisonDong

call_user_func和call_user_func_array都是接收函数名和其他变量作为参数,然后call_user_func去调用,
这两个函数可以实现简单的反射。
简单调用:

function foo($arg,$arg2){
    echo $arg;
    echo $arg2;
}
call_user_func('foo',1,2);//12
还可以用数组的方式传参数,这种方式适合传递多个参数。
call_user_func_array('foo',array(3,4));//34

调用类函数:

class Bar{
    static function foo($arg,$arg2){
        echo $arg;
        echo $arg2;
    }
}
call_user_func(array('Bar','foo'),5,6);//56
call_user_func_array(array('Bar','foo'),array(7,8));//78

纠正:我看见很多博客是这样写的例子:

class Bar{
    function foo($arg,$arg2){//注意,这里没有加static
        echo $arg;
        echo $arg2;
    }
}
call_user_func(array('Bar','foo'),5,6);//56
call_user_func_array(array('Bar','foo'),array(7,8));//78
这样的写法会出现notice级别的错误提示,是因为php默认调用的foo方法是static的。
勉强只能这样写:
@call_user_func(array('Bar','foo'),5,6);//56
@call_user_func_array(array('Bar','foo'),array(7,8));//78

最后,我们把代码写在一起:

function foo($arg,$arg2){
    echo $arg;
    echo $arg2;
}

class Bar{
    static function foo($arg,$arg2){
        echo $arg;
        echo $arg2;
    }
}

call_user_func('foo',1,2);
call_user_func_array('foo',array(3,4));
call_user_func(array('Bar','foo'),5,6);
call_user_func_array(array('Bar','foo'),array(7,8));
上一篇下一篇

猜你喜欢

热点阅读