【问题标题】:php callback function in class not being called类中的php回调函数未被调用
【发布时间】:2013-01-30 14:24:19
【问题描述】:

给定这行代码来回调一个函数和回调函数本身:

Class MyClass {
    public function doThings() {
        $this->gearman->client->setCompleteCallback("workerCompleted");
    }

    public function workerCompleted() {
        echo "worker is completed!";
    }
}

我收到Message: GearmanClient::setCompleteCallback(): function workerCompleted is not callable

setCompleteCallback 方法需要引号中的函数名,但我如何调用类方法? $this->"workerCompleted" 显然是错误的。

【问题讨论】:

    标签: php class function callback gearman


    【解决方案1】:
    $this->gearman->client->setCompleteCallback("workerCompleted");
    

    应该是

    $this->gearman->client->setCompleteCallback( array( $this, "workerCompleted"));
    

    因为您正在指定一个成员函数的回调,它需要一个需要调用的对象(或类名)数组以及函数的名称。更多信息请访问the docs

    【讨论】:

    • 此方法消除了错误但什么也不做。我的功能只有一个简单的回声,它没有被执行。为什么会这样?是否必须像@Dasun 在他的回答中提到的那样返回?
    • 不,不需要退货。现在的问题在于 gearman,因为它没有调用您的回调。这是指定回调的正确方法,现在您需要弄清楚为什么 gearman 不调用它。
    【解决方案2】:

    也许您使用doBackground 函数将代码发送到gearman 服务器?这确实不使用回调,因为根据定义,您不关心作业状态和应用程序代码中的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2013-06-17
      • 1970-01-01
      相关资源
      最近更新 更多