Класс Volatile

(PECL pthreads >= 3.0.0)

Введение

Класс Volatile появился в pthreads v3. Его введение является следствием новой семантики неизменности Threaded-свойств классов Threaded. Класс Volatile включает иммутабельность их Threaded-свойств и, также, используется для хранения массивов PHP в контексте Threaded.

Обзор классов

classVolatileextendsThreadedimplementsCollectable, Traversable {
publicThreaded::chunk(int$size, bool$preserve): array
publicThreaded::merge(mixed$from, bool$overwrite = ?): bool
publicThreaded::synchronized(Closure$block, mixed...$args): mixed
publicThreaded::wait(int$timeout = ?): bool
}

Примеры

Пример #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: Threaded members previously set to Threaded objects are immutable, cannot overwrite data in %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) { } 
To Top