美文网首页
1.9 Callable 回调

1.9 Callable 回调

作者: 57fc17b7d598 | 来源:发表于2017-06-21 15:36 被阅读14次

Callable类型是指可调用的函数,它的表现形式可以是一个字符串、数组、匿名函数等。

看看这个例子,就非常容易理解了:

// 定义类
class Example{
    function foo(){
        echo 1;
    }
    static function bar(){
        echo 2;
    }
}

// 此时的 $fn1 就是一个 callable
$fn1 = [new Example(), "foo"];
// 输出 1
$fn1();

// 此时的 $fn2 就是一个 callable
$fn2 = ["Example", "bar"];
// 输出 2
$fn2();

// 此时的 $nf3 就是一个 callable
$fn3 = "Example::bar";
// 输出 2
$fn3();

PHP 提供了一个内置的 call_user_func 函数,这个函数接收一个 callable 类型的参数。

自定义函数

// 自定义函数
function my_callback(){
    echo 'my_callback <br />';
}
// 调用函数
call_user_func('my_callback');

自定义对象

// 自定义类
class Base{
    static function static_callback(){
        echo 'base_static_callback <br />';
    }
}
class Example extends Base{
    public function class_callback(){
        echo 'class_callback <br />';
    }
    static function static_callback(){
        echo 'static_callback <br />';
    }
}
// 调用类方法

// 第一种、调用静态方法
call_user_func(['Example', 'static_callback']);
call_user_func('Example::static_callback');
// 还可以调用父类的静态方法
call_user_func(['Example', 'parent::static_callback']);


// 第二种、普通方法和静态方法都可以、但需要是公开的方法
$example = new Example();
call_user_func([$example, 'class_callback']);

细化理解

class Example{
    // 接受一个callable和一个字符串参数
    static function action(callable $callback, string $say){
        // print_r($callback);
        $callback($say);
    }
    // 做点什么?
    static function doSomeThink($say){
        echo $say . '<br />';
    }
}
// 当 callable 是一个数组的时候
Example::action(['Example', 'doSomeThink'], 'i love php');
// 当 callable 是一个字符串到时候
Example::action('Example::doSomeThink', 'i love php');
// 当 callable 是一个匿名函数的时候
Example::action(function($say){
    echo $say . '<br />';
}, 'i love php');

相关文章

  • 1.9 Callable 回调

    Callable类型是指可调用的函数,它的表现形式可以是一个字符串、数组、匿名函数等。 看看这个例子,就非常容易理...

  • 【C++ Templates(10)】泛型库

    Callable 标准库定义了许多可调用实例的组件,这里有一个术语叫回调(callback),回调的含义是:对一个...

  • php错误处理之自定义错误处理函数

    阅读原文 用户自定义错误经常用到的两个函数: set_error_handler(callable $回调的错误处...

  • 2019-08-12 线程2

    实现Callable接口:可以定义回调接口; T Call(); 一个线程创建之后一般都是就绪,很低概率会出...

  • Java并发:Callable异步回调Future、Future

    简单说明: Callable接口类似于Runnable,但是Runnable不会返回结果,并且无法抛出返回结果的异...

  • spl_autoload_register 参数说明

    Callable的回调类型有几种,题主说的是简单回调类型,传递一个字符串就是回调这个字符串命名的函数。还有传入数组...

  • Python3 - 减少可调用对象的参数个数

    问题 一个被其他python代码使用的callable对象,可能是一个回调函数或者是一个处理器,由于其参数太多,导...

  • Promise

    回调 把一个函数A传给另一个函数B调用,那么A就是回调函数。 回调地狱 回调套回调套回调套回调套回调套回调套回调....

  • python 减少可调用对象的参数个数

    有一个被其他python 代码使用的callable 对象,可能是一个回调函数或者是一个处理器,但是它的参数太多了...

  • 回调、同步回调、异步回调

    异步消息的传递-回调机制 原文地址:https://www.ibm.com/developerworks/cn/l...

网友评论

      本文标题:1.9 Callable 回调

      本文链接:https://www.haomeiwen.com/subject/hdctcxtx.html