zoukankan      html  css  js  c++  java
  • call_user_func 与call_user_func_array 的使用与区别

    1 call_user_func 的使用

    1)使用方法直接传递值

    function nowamagic($a,$b){   
    
        echo $a;   
        echo $b;   
    }   
    call_user_func('nowamagic', "111","222");
    

    2)使用类的方法

    class Func{
        //静态方法
        static public function _func(){
            $str =  'THE CLASS NAME IS '.__CLASS__.' AND CLASS STATIC METHOD IS '.__METHOD__;
            if(func_num_args()){
                //获取函数参数,获取参数也可以通过给方法设置形参来获取,这里只是没给方法设置形参获取参数的情况
                $arg = func_get_arg(0);
                return $str.' and argument is '.$arg;
            }else{
                return $str;
            }
        }
        //普通方法
        public function __func($num){
            return $num ? $num+1:$num;
        }
    }
    //传递类的静态方法,有两种方式
    //(1)种,传递····类名::方法名····
    var_dump(call_user_func("Func::_func",'hell world'));//这里传递参数
    //(2)种,传递类名和方法名的数组
    var_dump(call_user_func(array('Func','_func')));//这里没有传参数
    $num = 4;
    $o = new Func;
    //传递类普通方法必须用···数组···传递···该类的对象··和···方法名···
    $return = call_user_func(array($o,'__func'),$num);
    var_dump($return);
    

     3 使用命名空间的方法

    //定义类的命名空间
    namespace Home;
    class Space{
        //静态方法
        static public function _call($num){
            return $num +=10;
        }
        //普通方法
        public function _func(){
            return func_get_args();//返回函数的参数
        }
    }
    //针对静态方法,有两种调用方式
    //1.可以用array(__NAMESPACE__.'类名','方法名')传递类方法,也就是:array('命名空间类名','方法名')
    $return = call_user_func(array(__NAMESPACE__.'Space','_call'),10);
    //2.可以用····    __NAMESPACE__.'类名::方法名'    ···传递类方法,也就是:'命名空间类名::方法名'
    $return1 = call_user_func('HomeSpace::_call',100);
    var_dump($return);
    var_dump($return1);
    //针对普通方法,不用传入命名空间即可调用,如下
    $o = new Space;
    $return = call_user_func(array($o,'_func'),1,2,3,4,5);
    var_dump($return);

    2  call_user_func_array 的使用

    call_user_func 不能传递引用

    unction a($b, $c)   {   
        echo $b;   
        echo $c;   
    }   
    call_user_func_array('a', array("111", "222"));   //显示 111 222   
    调用类的内部方法
    Class ClassA   {   
    function bc($b, $c) {   
         $bc = $b + $c;   
        echo $bc;   
        }   
    }   
    call_user_func_array(array('ClassA','bc'), array("111", "222"));   //显示 333 
    引用
    function increment(&$var){
        $var++;
    }
    $a = 0;
    call_user_func('increment', $a);
    echo $a; // 0
    call_user_func_array('increment', array(&$a)); // You can use this instead  这里注意的地方就是 必须要传引用
    echo $a; // 1
  • 相关阅读:
    2.MYSQL之初体验
    nginx+uWSGI+django+virtualenv+supervisor
    静态动态网页
    web server 基础知识
    nginx与location语法详解
    编译安装nginx
    虚拟环境之virtualenvwrapper
    python开发之virtualenv
    【剑指Offer】面试题12. 矩阵中的路径
    【剑指Offer】面试题11. 旋转数组的最小数字
  • 原文地址:https://www.cnblogs.com/guokefa/p/10779569.html
Copyright © 2011-2022 走看看