美文网首页
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