zoukankan      html  css  js  c++  java
  • php中call_user_func 与 call_user_func_array的使用

    call_user_func()是利用回调函数处理字符串call_user_func_array是利用回调函数处理数组

    // 1、 调用自定义函数
    function test($a, $b)
    {
        echo $a + $b;
    }
    // 字符串传参
    call_user_func('test', 1, 2); // 3
    // 数组式传参
    call_user_func_array('test', [1, 2]); // 3
    
    // 2、 调用匿名函数
    call_user_func(function($a, $b){ echo $a + $b ;}, 1, 2); // 3
    call_user_func_array(function($a, $b){ echo $a + $b ;}, [1, 2]); // 3
    
    // 3、 调用系统函数
    echo call_user_func('strtoupper', 'abc'); // ABC
    echo call_user_func_array('strtoupper', ['abc']); // ABC
    
    // 4、 调用类中的函数
    class Test
    {
        static public function demo($a, $b)
        {
            echo $a + $b;
        }
        public function show($a, $b)
        {
            echo $a + $b;
        }
    }
    // 调用类中的静态方法
       // 类名方法名以数据形式
    call_user_func(['Test', 'demo'], 1, 2); // 3
    call_user_func_array(['Test', 'demo'], [1, 2]); // 3
       // 类名方法名以字符串形式
    call_user_func('Test::demo', 1, 2); // 3
    call_user_func_array('Test::demo', [1, 2]); // 3
    
    // 调用类中的动态方法,对象和方法必须通过数组形式传递
    call_user_func([new Test, 'show'], 1, 2); // 3
    call_user_func_array([new Test, 'show'], [1, 2]); // 3

    总结: call_user_func 和 call_user_func_array不同在于传参方式,前者是字符串形式,后者是数组形式。

    二者皆可调用自定义函数、匿名函数、系统函数以及类中的静态动态方法。如在TP5.1中运用Facade门面类作为静态代理类,

    使用静态方式调用动态类的动态方法,即让类无需实例化而直接进行静态方式的调用,带来了更好的可测试性和扩展性。

    在 thinkFacade类的最后有具体体现:

  • 相关阅读:
    交通部道路运输车辆卫星定位系统部标JTT808、809、796标准大全
    linux下如何源码编译安装vim
    Ubuntu如何重新启动tftp服务
    Ubuntu如何自定义tftp服务根目录
    git如何撤销git add操作?
    如何使两台主机间的不同网段互通?
    debian下如何源码安装tmux
    mysql插入数据自动生成主键uuid
    mysql的 UUID的生成方式
    MySQL SQL语句 生成32位 UUID
  • 原文地址:https://www.cnblogs.com/splendid/p/10658190.html
Copyright © 2011-2022 走看看