1.9 Callable 回调

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 
'; } // 调用函数 call_user_func('my_callback');

自定义对象

// 自定义类
class Base{
    static function static_callback(){
        echo 'base_static_callback 
'; } } class Example extends Base{ public function class_callback(){ echo 'class_callback
'; } static function static_callback(){ echo 'static_callback
'; } } // 调用类方法 // 第一种、调用静态方法 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 . '
'; } } // 当 callable 是一个数组的时候 Example::action(['Example', 'doSomeThink'], 'i love php'); // 当 callable 是一个字符串到时候 Example::action('Example::doSomeThink', 'i love php'); // 当 callable 是一个匿名函数的时候 Example::action(function($say){ echo $say . '
'; }, 'i love php');

你可能感兴趣的:(1.9 Callable 回调)