像php中的回调委托函数

Geo*_*uer 15 php oop

我想在PHP中实现类似于ac#delegate方法的东西.快速解释我正在尝试做的事情:我正在尝试实现一些异步功能.基本上,一些资源密集型调用在底层系统到达时会被排队,缓存和调度.当异步调用最终收到响应时,我希望引发一个回调事件.

我遇到了一些问题,想出一种在PHP中进行回调的机制.我想出了一种现在适用的方法,但我对它不满意.基本上,它涉及传递对象的引用和方法的名称,它将作为回调(将响应作为参数),然后在需要时使用eval调用方法.由于各种原因,这是次优的,有没有人知道更好的方法呢?

Vol*_*erK 16

(除了观察者模式)你也可以使用call_user_func()call_user_func_array().

如果你传递一个array(obj, methodname)第一个参数,它将被调用为$obj->methodname().

<?php
class Foo {
    public function bar($x) {
        echo $x;
    }
}

function xyz($cb) {
    $value = rand(1,100);
    call_user_func($cb, $value);
}

$foo = new Foo;
xyz( array($foo, 'bar') );
?>
Run Code Online (Sandbox Code Playgroud)