Php 如何在AMPP/parallel Amp\Loop中调用worker CallableTask中的类方法?

Php 如何在AMPP/parallel Amp\Loop中调用worker CallableTask中的类方法?,php,amphp,Php,Amphp,我正在使用Amp\Loop,想知道在$worker->enqueue(new CallableTask())中使用参数调用类方法的正确方法是什么。 以下是一个例子: <?php require_once "vendor/autoload.php"; use Amp\Loop; use Amp\Parallel\Worker\CallableTask; use Amp\Parallel\Worker\DefaultWorkerFactory; class Test_Amp { pu

我正在使用Amp\Loop,想知道在$worker->enqueue(new CallableTask())中使用参数调用类方法的正确方法是什么。
以下是一个例子:

<?php
require_once "vendor/autoload.php";
use Amp\Loop;
use Amp\Parallel\Worker\CallableTask;
use Amp\Parallel\Worker\DefaultWorkerFactory;


class Test_Amp {

  public function __construct() {
    $this->run_test();
  }
  public function run_test() {
    Amp\Loop::run(function () {
    $a = "";
    $b = "";
    $factory = new DefaultWorkerFactory();
    $worker = $factory->create();
    $result = yield $worker->enqueue(new CallableTask(array(&$this, 'run_task'), [$a, $b])); // Is it the correct way of calling run_task() ?
    $code = yield $worker->shutdown();
    });
  }

  public function run_task($a, $b) {
    //do something with $a and $b
  }
}

new Test_Amp();

是的,基本正确。在
$this
前面不需要
&

您也可以实现自己的
任务,而不是使用
CallableTask


请注意,您的整个对象在发送到worker并在worker中反序列化时被序列化,因此在子对象中对对象所做的修改在父对象中不可见,反之亦然。

如何执行此操作?请您详细说明一下好吗?@Flocker先生您可以看看CallableTask的实现。您需要实现一个接口及其运行方法: