zoukankan      html  css  js  c++  java
  • call_user_func和call_user_func_array的区别

    1.call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: 
    function a($b,$c) {
    echo $b;
    echo $c;
    }
    call_user_func('a', "111","222");
    call_user_func('a', "333","444");
    //显示 111 222 333 444
    ?>


    调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:
    class a {
    function b($c) {
       echo $c;
    }
    }
    //第一种调用方法
    //以下为类的静态调用相当于a::b("111");
    call_user_func(array("a", "b"),"111");
    //显示 111

    //第二种调用方法
    $a = new a;
    //以下调用等价于$a->b("111");
    call_user_func(array($a, "b"), "111");
    ?>

    2.call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
    function a($b, $c) {
    echo $b;
    echo $c;
    }
    call_user_func_array('a', array("111", "222"));
    //显示 111 222
    ?>

    call_user_func_array函数也可以调用类内部的方法的
    Class ClassA {
    function bc($b, $c) {
          $bc = $b + $c;
       echo $bc;
    }
    }

    //第一种调用方法:
    //以下调用等价于ClassA::bc("111", "222");
    call_user_func_array(array('ClassA','bc'), array("111", "222"));
    //显示 333

    //第二种调用方法:
    $a = new ClassA;
    //此调用等价于$a->bc("111", "222");
    class_user_func_array(array($a, "bc"), array("111", "222"));
    ?>

    call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:
    function a(&$b) {
    $b++;
    }
    $c = 0;
    call_user_func('a', &$c);
    echo $c;//显示 1
    call_user_func_array('a', array(&$c));
    echo $c;//显示 2

  • 相关阅读:
    WPF Expander 炫酷自定义Style
    C#8.0 中的 【索引与范围】
    Windows的图形设备接口与Windows绘图
    第一个Windows窗口应用程序
    0-1背包问题的分枝—限界算法
    哈密尔顿回路(旅行售货员问题)的回溯算法
    背包问题的贪心算法
    实现矩阵连乘的动态规划算法
    用分治策略实现棋盘覆盖问题
    sql注入实例分析
  • 原文地址:https://www.cnblogs.com/yimu/p/2750933.html
Copyright © 2011-2022 走看看