美文网首页
PHP手册之Callback 回调类型

PHP手册之Callback 回调类型

作者: killtl | 来源:发表于2018-03-20 09:58 被阅读0次

前言

PHP手册系列文章,会挑选一些手册中有意思的评论进行翻译
手册目录:语言参考---类型---Callback回调类型
参考详情

评论

  1. 可以使用self::methodName作为一个回调函数,但是这样做是很危险的
class Foo {
    public static function doAwesomeThings() {
        FunctionCaller::callIt('self::someAwesomeMethod');
    }

    public static function someAwesomeMethod() {
        // fantastic code goes here.
    }
}

class FunctionCaller {
    public static function callIt(callable $func) {
        call_user_func($func);
    }
}

Foo::doAwesomeThings();
}

运行出错:class 'FunctionCaller' does not have a method 'someAwesomeMethod'.因为FunctionCaller并不知道self对应着Foo

基于此,你应该始终使用全类名进行调用,如下:

FunctionCaller::callIt('Foo::someAwesomeMethod');
  1. 当你指明类的方法以数组的形式回调时(例如.array($this,'myFunc')),回调的方法可以是私有的,但此种情况只适用于类内调用,如果类外调用私有方法将会报错
class mc {
   public function go(array $arr) {
       array_walk($arr, array($this, "walkIt"));
   }

   private function walkIt($val) {
       echo $val . "<br />";
   }

    public function export() {
        return array($this, 'walkIt');
    }
}

$data = array(1,2,3,4);

$m = new mc;
$m->go($data); // valid

array_walk($data, $m->export()); // 将会产生警告

输出:1<br />2<br />3<br />4<br />
warning:array_walk() expects parameter 2 to be a valid callback, cannot access private method mc::walkIt() in /in/tfh7f on line 22.

  1. 你可以使用$this来指定一个回调函数
class MyClass {
    public $property = 'Hello World!';
    public function MyMethod()
    {
        call_user_func(array($this, 'myCallbackMethod'));
    }

    public function MyCallbackMethod()
    {
        echo $this->property;
    }
}
  1. 可以像回调一个方法那样回调一个实现了__invoke()魔术方法的对象,__invode()方法会在你尝试以调用函数的形式调用对象时被自动调用
class CallableClass 
{
    function __invoke($x) {
        var_dump($x);
    }
}
$obj = new CallableClass;
call_user_func($obj, 5);   //以函数的形式进行调用,会调用__invoke(),输出int(5)
var_dump(is_callable($obj));   //是callable类型的

相关文章

  • PHP手册之Callback 回调类型

    前言 PHP手册系列文章,会挑选一些手册中有意思的评论进行翻译手册目录:语言参考---类型---Callback回...

  • 将CallBack改写成Promise

    CallBack回调函数是js的特色之一, 但CallBack回调方法, 非常容易造成回调地狱(callback ...

  • PHP回调函数

    回调函数:给函数传递一个函数作为参数; PHP支持回调函数(callback),但和JavaScript相比,5....

  • JavaScript系列之回调函数callback

    JavaScript系列之回调函数callback JavaScript回调函数的使用是很常见的,引用官方回调函数...

  • C函数回调(callback)C++类成员函数的方法

    问题的由来 C回调的步骤一般是: 声明callback函数类型; 根据类型定义一个callback函数A; 把定义...

  • Callback、Promise、async/await

    一、Callback回调函数例子: callback函数应用举例: 就是通过callback回调函数来传回数据 缺...

  • 回调

    1. 同步回调 Callback Server Client 运行结果 2. 异步回调 Callback同上 Se...

  • PHP中的callback类型

    Callback / Callable 类型 在PHP的官方文档中,经常可以看到伪类型 Callback / Ca...

  • 回调(callback)

    回调(callback)就是讲一段可执行的代码和一个特定的事件绑定起来。当特定的事件发生时,就会执行这段代码。Ob...

  • 回调Callback

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其...

网友评论

      本文标题:PHP手册之Callback 回调类型

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