php多线程变量作用域共享问题

php多线程变量作用域共享问题,php,multithreading,variables,object,pecl,Php,Multithreading,Variables,Object,Pecl,我正在用php制作一个多线程cli应用程序,但是在线程之间共享变量时遇到了一些问题 这是我的密码: <?php class testThread extends Thread{ public function run(){ wrapper::hello(); } } class wrapper{ public static $test0; public static $test1; public static function cr

我正在用php制作一个多线程cli应用程序,但是在线程之间共享变量时遇到了一些问题

这是我的密码:

<?php
class testThread extends Thread{
    public function run(){
        wrapper::hello();
    }
}

class wrapper{
    public static $test0;
    public static $test1;
    public static function create(){
        self::$test0 = 'a string';
        self::$test1 = new DateTime();

        echo '#main thread echo start' . "\n";
        var_dump(self::$test0);
        var_dump(self::$test1);
        echo '#main thread echo end' . "\n\n";
        //echo '#---------------------------' . "\n\n";

        $test = new testThread();
        $test->start();
    }

    public static function hello(){
        echo '#sub thread echo start' . "\n\n";
        var_dump(self::$test0);
        var_dump(self::$test1);
        echo '#sub thread echo end' . "\n";
    }
}

wrapper::create();
?>
在这个结果中,您可以看到静态字符串变量可以从子线程获取值,但DateTime对象不是

我的php版本是

PHP 5.5.4(cli)(构建时间:2013年10月9日11:27:32)(调试)版权所有(c) 1997-2013 PHP Group Zend Engine v2.5.0版权所有(c)1998-2013 Zend技术公司

如果你有任何意见,请留在这里,这将是非常有帮助的我

谢谢

--------更新-----------

这是我的phpinfo

php test.php | grep "Confi"
Configure Command =>  './configure'  '--enable-sockets' '--enable-debug' '--enable-maintainer-zts' '--enable-pthreads'
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
Configuration

php线程的要求:

pthreads需要一个启用ZTS的PHP构建(--enable maintainer ZTS或--enable ZTS on Windows)


确保还安装了用于php线程的PECL扩展。

来自php手册的介绍:

静态成员:创建新上下文(线程或工作线程)时, 只复制静态类的简单成员,不复制资源或 对象从静态类复制到线程上下文中 成员。这使它们可以作为一种本地线程运行 存储例如,在启动上下文时,一个类 成员包括数据库服务器的连接信息,以及 连接本身,将只具有简单的连接信息 复制,而不是连接。允许新上下文启动 连接的方式与创建它的上下文相同,存储 在不影响原始上下文的情况下在同一位置进行连接


我非常确定我在php编译时进行了配置,这是我的phpinfo()php test.php | grep“Confi”configure命令=>'./配置“”--启用套接字“”--启用调试“”--启用维护程序zts“”--启用pthreads'配置文件(php.ini)Path=>/usr/local/lib加载的配置文件=>/usr/local/lib/php.ini配置感谢您的回答,所以线程之间不可能共享对象?我认为的另一种方法是将变量写入tmp文件以供使用…但在我的情况下,我希望在主线程中完成子线程时触发某些操作。这仅适用于静态,请尝试阅读github上的示例:,它们涵盖了广泛的主题,应该可以让任何人使用。。。
php test.php | grep "Confi"
Configure Command =>  './configure'  '--enable-sockets' '--enable-debug' '--enable-maintainer-zts' '--enable-pthreads'
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
Configuration