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

相关推荐

  • 3.2PHP语言的类(Class)

    类 一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。 final类 final关键字加在类前面可以禁止一个类被继承。 构造函数和析构函数 具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。 一个类可以没有构造函数,构造函数可以没有参数,构造函数体…

    PHP语言教程 2021年3月2日
    08140
  • 5.3PHP语言的纤程(Fiber)

    纤程可以在调用堆栈中的任何位置被挂起,在纤程内暂停执行,直到稍后恢复。 纤程一旦被暂停,可以使用 Fiber::resume() 传递任意值、或者使用 Fiber::throw() 向纤程抛出一个异常以恢复运行。这个值或者异常将会在 Fiber::suspend()&n…

    PHP语言教程 2021年5月3日
    08580
  • 3.3PHP语言的抽象(Abstract)类和接口(Interface)

    抽象类 PHP支持抽象类和抽象方法。定义为抽象的类不能被实例化但可以被子类继承。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控…

    PHP语言教程 2021年3月3日
    07550

发表回复

登录后才能评论