1
  class Test extends thread {
     function __construct(&$db,$userObj) {  
     $this -> userObj = $userObj;
     print "Original:";
     var_dump($db);
     $this->db = $db;
     print "InThread:";
     var_dump($this->db);      
     // as value of $this->db and db(in constructor) is different I am gettting different values. 
  }
 public function run(){
  $userId = $this->userObj->getUserId();
  $data = $this->db->getData();
 // as value of $this->db and db(in constructor) is different I am getting different values. 
  }

 function getData(&$db,$userObj){
  $thread = new Test($db,$userObj);
  $thread->start();
  }

我想在我的运行函数中使用 db 的值。如何在不更改 $db 值的情况下通过 run() 访问线程构造函数变量。

4

1 回答 1

0

Threaded对象本身不是对象的成员属性,Threaded将在写入时自动序列化,并在读取时自动反序列化。

当一个Threaded成员属性被访问时,由于 PHP 的架构,pthreads需要禁止返回其他创建的对象Threads(不共享)。

如果属性本身是Threaded有效的管理(在 PHP7 中),但您仍然没有得到相同的物理对象。

这就是$this->db$db是不同对象的原因。

尝试通过引用传递不会有任何区别;Threaded对象不支持对成员属性的引用。

于 2016-10-06T06:15:20.133 回答