(PECL pthreads >= 3.0.0)
Введение
Класс Volatile является новым для pthreads v3. Его введение является следствием новой семантики неизменяемости членов Threaded классов Threaded. Класс Volatile обеспечивает изменчивость своих членов Threaded, а также используется для хранения массивов PHP в контекстах Threaded.
Обзор классов
class Volatile extends Threaded implements Collectable , Traversable { /* Наследуемые методы */ public array Threaded::chunk ( int $size , bool $preserve ) public int Threaded::count ( void ) public bool Threaded::extend ( string $class ) public Threaded Threaded::from ( Closure $run [, Closure $construct [, array $args ]] ) public array Threaded::getTerminationInfo ( void ) public bool Threaded::isRunning ( void ) public bool Threaded::isTerminated ( void ) public bool Threaded::isWaiting ( void ) public bool Threaded::lock ( void ) public bool Threaded::merge ( mixed $from [, bool $overwrite ] ) public bool Threaded::notify ( void ) public bool Threaded::notifyOne ( void ) public bool Threaded::pop ( void ) public void Threaded::run ( void ) public mixed Threaded::shift ( void ) public mixed Threaded::synchronized ( Closure $block [, mixed $... ] ) public bool Threaded::unlock ( void ) public bool Threaded::wait ([ int $timeout ] ) }
Примеры
Пример #1 Новая семантика неизменяемости Threaded
<?php class Task extends Threaded { public function __construct() { $this->data = new Threaded(); // попытка перезаписать свойство Threaded класса Threaded (недопустимо) $this->data = new StdClass(); } } var_dump((new Task())->data);
Результатом выполнения данного примера будет что-то подобное:
RuntimeException: потоковые элементы, ранее установленные в потоковые объекты, неизменяемы, не могут перезаписывать данные в %s:%d
Пример #2 Volatile использование регистра
<?php class Task extends Volatile { public function __construct() { $this->data = new Threaded(); // попытка перезаписать свойство Threaded класса Volatile (допустимо) $this->data = new StdClass(); } } var_dump((new Task())->data);
Результатом выполнения данного примера будет что-то подобное:
object(stdClass)#3 (0) { }