Почему некоторые операции с потоковыми массивами в PHP, похоже, не работают?

У меня есть этот класс потоков, который использует PHP-расширение pthread :

 class Task extends Thread { protected $arr = array(); public function run() { $this->arr[] = 1; $this->arr[] = 2; $this->arr[] = 3; var_dump($this->arr); } } $thread = new Task(); $thread->start(); $thread->join(); 

Результат необъяснимо показывает пустой массив. Может кто-нибудь кратко объяснить, почему?

У меня есть решение, но не полное объяснение, поэтому больше ответов было бы очень желанным.

Вот мой ребенок с Threaded (сокращенный ради краткости):

 class ObjectConstructorThreaded extends Threaded { protected $worker; protected $className; protected $parameters; protected $objectKey; public function __construct($className, $parameters) { $this->className = $className; $this->parameters = $parameters; } public function setWorker(\Worker $worker) { $this->worker = $worker; } protected function getWorker() { return $this->worker; } public function run() { $reflection = new \ReflectionClass($this->className); $instance = $reflection->newInstanceArgs($this->parameters); $this->objectKey = $this->getWorker()->notifyObject($instance); } public function getObjectKey() { return $this->objectKey; } } 

И Worker (снова обрезанный):

 class ObjectServer extends Worker { protected $count = 0; protected $objects = array(); public function notifyObject($object) { $key = $this->generateHandle(); /* // Weird, this does not add anything to the stack $this->objects[$key] = $object; // Try pushing - fail! $this->objects[] = $object; // This works fine? (but not very useful) $this->objects = array($key => $object); */ // Try adding - also fine! $this->objects = $this->objects + array($key => $object); return $key; } } 

Наконец, чтобы запустить поток:

 $thread = new ObjectServer(); $thread->start(); $threaded = new ObjectConstructorThreaded($className, $parameters); $threaded->setWorker($this->worker); $thread->stack($threaded); 

Как вы можете видеть из чистых комментариев, которые я написал в то время, попытки вставить или нажать на массив не удались, но переписать его (установив его на фиксированное значение или слияние старого значения и новой записи), похоже, работает ,

Поэтому я отношусь к потоковому потоку как к нетривиальным типам (массивам и объектам) эффективно неизменяемым и что их можно только сбросить и не изменить. У меня тоже был опыт работы с сериализуемыми классами.

Что касается того, почему это так, или если есть лучший подход, я обновлю этот ответ, если узнаю!