0

我正在研究 Gearman 客户端-工作者脚本。我们可以将 Gearman 回调方法声明为受保护的或私有的吗?IE

$this->gearmanClient->setCompleteCallback(array($this, 'JobComplete'));
$this->gearmanClient->setFailCallback(array($this, 'JobFailCallBack'));

与“JobComplete”方法等一起使用的最佳访问运算符是什么?

4

2 回答 2

3

在 PHP 中,私有/受保护的回调只有在从正确的上下文(例如,在有权访问这些回调的类中)调用时才能访问 - 请参阅此处进行讨论。

在您的情况下, GearmanClient 类将无法访问回调(除非您围绕它做了一些非常奇怪的抽象)。所以答案是否定的,你不能。

至于访问运算符的问题(如果我理解正确的话——是使用对象回调还是类回调),我猜答案是——这取决于。如果您的回调将提供有关特定对象的数据,那么该对象接收回调是有意义的。如果它是您的应用程序将仅存储在 DB 中的通用消息,那么静态类接口也可以做到这一点。

于 2012-06-11T10:21:27.833 回答
1

我们当然可以。只需将其包裹在闭包周围:

$this->gearmanClient->setCompleteCallback(function () {
    $this->JobComplete();
});
于 2013-02-11T13:35:16.373 回答