类似于 php 中的回调委托函数

2022-08-31 00:58:39

我想实现类似于PHP中的c#委托方法的东西。简单解释一下我总体上要做的事情:我正在尝试实现一些异步功能。基本上,一些资源密集型调用在底层系统接近它时会排队,缓存和调度。当异步调用最终收到响应时,我希望引发一个回调事件。

我在提出一种在PHP中进行回调的机制时遇到了一些问题。我想出了一个目前有效的方法,但我对它不满意。基本上,它涉及传递对对象的引用以及将用作回调的方法的名称(将响应作为参数),然后在需要时使用eval调用该方法。由于各种原因,这是次优的,有没有更好的方法来做到这一点,任何人都知道?


答案 1

(除了观察者模式之外)您还可以使用call_user_func()或call_user_func_array())。

如果传递 as first 参数,它将作为 调用。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') );
?>

答案 2

您如何看待使用观察者模式?如果没有,您可以通过以下方式实现真正的回调:

// This function uses a callback function. 
function doIt($callback) 
{ 
    $data = "this is my data";
    $callback($data); 
} 


// This is a sample callback function for doIt(). 
function myCallback($data) 
{ 
    print 'Data is: ' .  $data .  "\n"; 
} 


// Call doIt() and pass our sample callback function's name. 
doIt('myCallback'); 

显示:数据是:这是我的数据


推荐