尝试加载类"线程"来自全局命名空间。你忘记了"使用"声明?

时间:2016-06-30 14:08:43

标签: php multithreading symfony

说明

创建了一个扩展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;声明,当我已经使用一个?

1 个答案:

答案 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更容易;)。)。