The Volatile class

(PECL pthreads >= 3.0.0)

Вступ

The Volatile class is new to pthreads v3. Its introduction is a consequence of the new immutability semantics of Threaded members of Threaded classes. The Volatile class enables for mutability of its Threaded members, and is also used to store PHP arrays in Threaded contexts.

Короткий огляд класу

class Volatile extends Threaded implements Collectable, Traversable {
/* Успадковані методи */
public Threaded::chunk(int $size, bool $preserve): array
public Threaded::extend(string $class): bool
public Threaded::merge(mixed $from, bool $overwrite = ?): bool
public Threaded::synchronized(Closure $block, mixed ...$args): mixed
public Threaded::wait(int $timeout = ?): bool
}

Приклади

Приклад #1 New immutability semantics of Threaded

<?php

class Task extends Threaded
{
public function
__construct()
{
$this->data = new Threaded();

// attempt to overwrite a Threaded property of a Threaded class (invalid)
$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 use-case

<?php

class Task extends Volatile
{
public function
__construct()
{
$this->data = new Threaded();

// attempt to overwrite a Threaded property of a Volatile class (valid)
$this->data = new stdClass();
}
}

var_dump((new Task())->data);

Поданий вище приклад виведе щось схоже на:

object(stdClass)#3 (0) {
}