PHP:在单独的线程中运行类方法

时间:2015-04-30 07:24:28

标签: php multithreading

是否可以在PHP的单独线程中运行类的方法?
例如:
  螺纹:

class AsyncThread extends \Thread {

    private $method;
    private $obj;
    private $params;
    private $timeout;

    public function __construct($obj, $method, $params, $timeout){
        $this->obj    = $obj;
        $this->method = $method;
        $this->params = $params;
        $this->timeout = $timeout;
    }

    public function run() {
        sleep($this->timeout);
        if (call_user_func_array([$this->obj, $this->method], $this->params)) {
            return true;
        } else return false;
    }
}  

班级:

class MyClass {

    private $param = 'username';

    public function callThread() {
        $thread = new AsyncThread($this, 'threadMethod', ['hello'], 5);
    }

    public function threadMethod($param) {
        echo "{$param} {$this->param}";
    }

}

当我尝试调用方法callThread时,错误:

$obj = new MyClass();
$obj->callThread();

Serialization of 'Closure' is not allowed

或者还有什么方法可以启动一个线程,以便流可以访问对象类MyClass的方法?

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找的是pthreads,来自PHP DOC:

  

pthreads是面向对象的API,允许用户登陆   PHP中的多线程。它包括您需要创建的所有工具   针对Web或控制台的多线程应用程序。 PHP   应用程序可以创建,读取,写入,执行和同步   线程,工人和线程对象。

     

一个线程对象:一个线程对象构成了一个基础   允许pthreads运行的功能。它暴露了   同步方法和程序员的一些有用的接口。

这是GitHub - PHTREADS