美文网首页
php中的call_user_func和call_user_fu

php中的call_user_func和call_user_fu

作者: EdisonDong | 来源:发表于2017-03-15 22:12 被阅读0次

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

相关文章

网友评论

      本文标题:php中的call_user_func和call_user_fu

      本文链接:https://www.haomeiwen.com/subject/dvvrnttx.html