创建了一个扩展Thread的php类ChildThread。它看起来像这样:
use Thread;
class ChildThread extends Thread
{
public $data;
private $anonymous_func;
public function __construct($anonymous_func)
{
$this->anonymous_func = $anonymous_func;
}
public function run(){
$func = $this->anonymous_func;
$this->data = $func();
}
}
我收到以下错误:
尝试加载类"线程"来自全局命名空间。你是否 忘记"使用"声明?
我明显有一个use
语句,它使用了正确的类:
/**
* When the start method of a Thread is invoked, the run method code will
* be executed in separate Thread, asynchronously.<br/>After the run method
* is executed the Thread will exit immediately, it will be joined with
* the creating Thread at the approriate time.
* @link http://www.php.net/manual/en/class.thread.php
*/
class Thread extends Threaded implements Traversable, Countable, ArrayAccess {
/** class code here **/
}
为什么说我需要使用&#34;使用&#34;声明,当我已经使用一个?
答案 0 :(得分:1)
您必须安装提供这些类的pthreads扩展程序。默认情况下,它不会安装在PHP Core中,因为它需要PHP的线程安全版本。实际上,PHP并不是标准发行版中的线程安全版本。
您可以通过获取PHP的源和compiling it with a special flag来启用支持ZTS的PHP( Zend Thread Safety )。对于Windows,也可以直接下载。
我建议您为Web应用程序(which can't use threads)提供正常版本的PHP,并为CLI应用程序(守护程序等)提供手工编译的ZTS版本。
一旦你拥有了ZTS版本的PHP,就可以通过PECL安装pthread,或者手动安装(比正确编译PHP更容易;)。)。