我正在使用 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();
?>
和结果
#main thread echo start
string(8) "a string"
object(DateTime)#1 (3) {
["date"]=>
string(19) "2013-10-14 12:36:17"
["timezone_type"]=>
int(3)
["timezone"]=>
string(11) "Asia/Taipei"
}
#main thread echo end
#sub thread echo start
string(8) "a string"
NULL
#sub thread echo end
在这个结果中,您可以看到静态 String 变量可以从子线程中获取值,但 DateTime 对象不是!
我的 php 版本是
PHP 5.5.4 (cli) (built: Oct 9 2013 11:27:32) (DEBUG) 版权所有 (c) 1997-2013 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
如果您有任何意见,请在此处留下,这对我很有帮助。
谢谢。
- - - - 更新 - - - - - -
这是我的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