Как получить доступ к переменной конструктора потока в функции запуска?

  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 в моей функции запуска. Как получить доступ к переменной конструктора потока через run() без изменения значений $db.

1 ответ

Объекты, установленные как свойства-члены Threaded объекты, которые сами не являются Threaded будет автоматически сериализован при записи и автоматически не сериализован при чтении.

Когда Threaded доступ к свойству члена, pthreads необходимо запретить возврат объектов, созданных другими Threads из-за архитектуры PHP (ничего не поделитесь).

Если само свойство Threaded тогда это эффективно управляется (в PHP7), но вы все равно не получаете тот же физический объект.

Это причина того, что $this->db а также $db это разные объекты.

Попытка передать по ссылке не будет иметь никакого значения; Threaded объекты не поддерживают ссылки на свойства элемента.

Другие вопросы по тегам