zoukankan      html  css  js  c++  java
  • call_user_func 和 call_user_func_array用法

    说明

    call_user_func 和 call_user_func_array
    相同:都可以调用函数和类内部的函数,
    不同:不同的是传递的参数不同,前者是一个参数一个参数传递, 后者是传递array参数


    一:call_user_func 用法

    1.1  调用函数

    <?php
    function funcA($a) {
            echo $a;
    }
    
     function funcB() {
        $args = func_get_args();
    print_r($args);
    } call_user_func('funcA', 'testA'); call_user_func('funcB', 'testA', 'testB');

    1.2 类内部函数调用

    class  clsA {
        // func_get_args() 函数获取参数
        public function funcA() {
          $args = func_get_args();
          $num = func_num_args();
          print_r($args);
          echo $num;
        }
    
        public static function funcB() {
            $args = func_get_args();
            $num = func_num_args();
            print_r($args);
            echo $num;
        }
    
        public static function funcC($a, $b) {
            echo $a.' - ' . $b;
        }
    }
    
    call_user_func(array('clsA', 'funcA'), 'arg1', 'arg2');
    call_user_func('clsA::funcB', 'argb1', ' argb2');
    call_user_func('clsA::funcC', 'argc1', 'argc2');

     


    二:call_user_func_array 用法

    从上面的例子可以看到 func_get_args() 可以获取函数的参数,而且是数组形式的参数,那么能不能直接传给函数呢,对,就是这个 call_user_func_array
    

    2.1 调用函数

    <?php
    //直接传递参数
    function funcC($a, $b) {
        echo $a .' - '. $b;
    }
    
    //用 func_get_args() 函数获取传递的参数
    function funcD($a, $b) {
        $args = func_get_args();
        print_r($args);
    }
    //后面传递的是array参数
    call_user_func_array('funcC', array('1', '2')); call_user_func_array('funcD', array('d1', 'd2'));

    2.2 类内部函数调用

    class funcE {
          //直接获取参数
        static function funcA($a, $b) {
            echo " " .$a . ' - ' . $b;
        }
          
           //用func_get_args()获取参数
        static function funcB() {
            $args = func_get_args();
            print_r($args);
        }
    }
    // 2种调用方法
    //这样调用 call_user_func_array(array('funcE', 'funcA'), array('1', '2')); call_user_func_array(array('funcE', 'funcB'), array('1', '2', 3)); //或者这样调用 call_user_func_array('funcE::funcA', array('1', '2')); call_user_func_array('funcE::funcB', array('1', '2', 3));
    == just do it ==
  • 相关阅读:
    JDK源码之Thread 类分析
    java中符号类型和无符号类型的问题分析
    国内高速Maven仓库
    Idea Live Templates代码模板
    正则表达式
    java内存泄漏
    MySQL查看 InnoDB表中每个索引的高度
    ThreadLocalMap里Entry为何声明为WeakReference?
    Java JDBC中,MySQL字段类型到JAVA类型的转换
    MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
  • 原文地址:https://www.cnblogs.com/jiujuan/p/8870332.html
Copyright © 2011-2022 走看看