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.
Объекты, установленные как свойства-члены Threaded
объекты, которые сами не являются Threaded
будет автоматически сериализован при записи и автоматически не сериализован при чтении.
Когда Threaded
доступ к свойству члена, pthreads
необходимо запретить возврат объектов, созданных другими Threads
из-за архитектуры PHP (ничего не поделитесь).
Если само свойство Threaded
тогда это эффективно управляется (в PHP7), но вы все равно не получаете тот же физический объект.
Это причина того, что $this->db
а также $db
это разные объекты.
Попытка передать по ссылке не будет иметь никакого значения; Threaded
объекты не поддерживают ссылки на свойства элемента.
Других решений пока нет …