• 技术文章 >后端开发 >PHP问题

    PHP如何使用Callback/Callable类型

    醉折花枝作酒筹醉折花枝作酒筹2021-05-28 17:54:44转载116
    本篇文章给大家介绍一下PHP使用Callback/Callable类型的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    PHP Callback/Callable 类型使用

    测试代码

    <?php
    
    /**
     * Class ParentCallback
     */
    class ParentCallback
    {
        /**
         * @param  int  $a
         * @param  int  $b
         * @param  int  $c
         *
         * @return int
         */
        public static function parentSum(int $a, int $b, int $c)
        {
            return $a + $b + $c;
        }
    
        /**
         * @param  int  $a
         * @param  int  $b
         * @param  int  $c
         *
         * @return float|int
         */
        public function parentMultiply(int $a, int $b, int $c)
        {
            return $a * $b * $c;
        }
    }
    
    /**
     * Class Callback
     */
    class Callback extends ParentCallback
    {
    
        /**
         * @param  int  $a
         * @param  int  $b
         *
         * @return int
         */
        public static function sum(int $a, int $b)
        {
            return $a + $b;
        }
    
        /**
         * @param  int  $a
         * @param  int  $b
         *
         * @return float|int
         */
        public function multiply(int $a, int $b)
        {
            return $a * $b;
        }
    }
    
    /**
     * Class Invoke
     */
    class Invoke
    {
    
        /**
         * @param  int  $a
         * @param  int  $b
         *
         * @return float|int
         */
        public function __invoke(int $a, int $b)
        {
            return $a / $b;
        }
    }
    
    /**
     * @param  int  $a
     * @param  int  $b
     *
     * @return int
     */
    function sum(int $a, int $b)
    {
        return $a + $b;
    }
    
    /**
     * @param $callback
     * @param  mixed  ...$parameter
     *
     * @return mixed
     */
    function do_something(callable $callback, ...$parameter)
    {
        return call_user_func($callback, ...$parameter);
    }

    测试示例

    // 闭包
    $ret = do_something(function ($a, $b){
        return $a - $b;
    }, 5, 6);
    printf("闭包测试示例: %s\n", $ret);
    
    // 函数
    $ret = do_something('sum', 5, 6);
    printf("函数测试示例: %s\n", $ret);
    
    // 静态方法
    $ret = do_something([Callback::class, 'sum'], 5, 6);
    printf("静态方法示例: %s\n", $ret);
    
    $ret = do_something('\Callback::sum', 5, 6);
    printf("静态方法示例: %s\n", $ret);
    
    $ret = do_something([Callback::class, 'self::parentSum'], 5, 6, 7);
    printf("静态方法示例: %s\n", $ret);
    
    $ret = do_something([Callback::class, 'parentSum'], 5, 6, 7);
    printf("静态方法示例: %s\n", $ret);
    
    $ret = do_something([Callback::class, 'parent::parentSum'], 5, 6, 7);
    printf("静态方法示例: %s\n", $ret);
    
    // 方法
    $callback = new Callback;
    $ret = do_something([$callback, 'multiply'], 5, 6);
    printf("普通方法示例: %s\n", $ret);
    
    // invoke
    $invoke = new Invoke;
    $ret = do_something($invoke, 5, 6);
    printf("对象 invoke 示例: %s\n", $ret);

    测试结果

    闭包测试示例: -1
    函数测试示例: 11
    静态方法示例: 11
    静态方法示例: 11
    静态方法示例: 18
    静态方法示例: 18
    静态方法示例: 18
    普通方法示例: 30
    对象 invoke 示例: 0.83333333333333

    推荐学习:php视频教程

    以上就是PHP如何使用Callback/Callable类型的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    上一篇:PHP如何使用Mcrypt加密 下一篇:如何获取PHP命令行参数
    第16期线上培训班

    相关文章推荐

    • php怎么将字符串转换boolean类型• php不知道键值怎么删除数组元素• 在linux上搭建php环境的方法• php修改文件名的函数是什么• php ziparchive中文乱码怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网