2.6PHP复合(Compound)类型之可调用(callable)

回调函数可以通过 可调用(callable) 类型声明来表示。

可调用 (callable) 类型的本质是回调函数。

回调函数

回调函数可以是简单函数,还可以是类静态方法,匿名函数,箭头函数。

// 回调函数示范
function my_callback_function() {
    echo 'hello world!';
}

// 回调方法示范
class MyClass {
    static function myCallbackMethod() {
        echo 'Hello World!';
    }
}

调用回调函数

PHP是将回调函数以string形式传递的。

// 类型 1:简单的回调
call_user_func('my_callback_function'); 

// 类型 2:静态类方法回调
call_user_func(array('MyClass', 'myCallbackMethod')); 

// 类型 3:对象方法回调
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// 类型 4:静态类方法回调
call_user_func('MyClass::myCallbackMethod');

// 类型 5:父级静态类回调
class A {
    public static function who() {
        echo "A\n";
    }
}

class B extends A {
    public static function who() {
        echo "B\n";
    }
}

call_user_func(array('B', 'parent::who')); // A

// 类型 6:实现 __invoke 的对象用于回调
class C {
    public function __invoke($name) {
        echo 'Hello ', $name, "\n";
    }
}

$c = new C();
call_user_func($c, 'PHP!');

call_user_func

call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed

第一个参数 $callback 是被调用的回调函数,其余参数是回调函数的参数。返回回调函数的返回值。

call_user_func_array

call_user_func_array(callable $callback, array $param_arr): mixed

第一个参数 $callback 是被调用的回调函数,数组参数(param_arr)是回调函数的参数。返回回调函数的结果。如果出错的话就返回false

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/10085.html

(0)
上一篇 2021年2月6日 02:44
下一篇 2021年2月7日 03:40

相关推荐

  • 1.1PHP语言的标记(Tag)

    PHP 脚本以 <?php 开头,以 ?> 结尾。 PHP解释器会执行 <?php 和 ?> 标记内的代码,标记外的内容会原封不动地输出。 如果文件内容仅仅包含 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外…

    PHP语言教程 2021年1月1日
    03990
  • 3.6PHP类的成员访问控制(Visibility)

    对属性或方法的访问控制(PHP 7.1.0 以后支持常量),是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为public的类成员可以在类的内部和外部被访问。被定义为protected的类成员则可以被其自身以及其子类和父类访问。被定…

    PHP语言教程 2021年3月6日
    05660
  • 3.1PHP语言的命名空间(Namespace)

    什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录 /home/greg 和 /hom…

    PHP语言教程 2021年3月1日
    04100

发表评论

登录后才能评论