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 <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');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容