是否可以在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的方法?
答案 0 :(得分:2)
我认为您正在寻找的是pthreads,来自PHP DOC:
pthreads是面向对象的API,允许用户登陆 PHP中的多线程。它包括您需要创建的所有工具 针对Web或控制台的多线程应用程序。 PHP 应用程序可以创建,读取,写入,执行和同步 线程,工人和线程对象。
一个线程对象:一个线程对象构成了一个基础 允许pthreads运行的功能。它暴露了 同步方法和程序员的一些有用的接口。