Introduction
PHP Manual
PHP Manual»pthreads»Volatile

La classe Volatile

(PECL pthreads >= 3.0.0)

La classe Volatile est nouvelle dans pthreads v3. Son introduction est une conséquence des nouvelles sémantiques d'immutabilité des membres Threaded des classes Threaded. La classe Volatile permet la mutabilité de ses membres Threaded, et est également utilisée pour stocker des tableaux PHP dans des contextes Threaded.

class Volatile extends Threaded implements Collectable, Traversable {
/* Méthodes héritées */
public function Threaded::chunk(int $size, bool $preserve): array
public function Threaded::count(): int
public function Threaded::extend(string $class): bool
public function Threaded::isRunning(): bool
public function Threaded::isTerminated(): bool
public function Threaded::merge(mixed $from, bool $overwrite = ?): bool
public function Threaded::notify(): bool
public function Threaded::notifyOne(): bool
public function Threaded::pop(): bool
public function Threaded::run(): void
public function Threaded::shift(): mixed
public function Threaded::synchronized(Closure $block, mixed ...$args): mixed
public function Threaded::wait(int $timeout = ?): bool
}

Exemple #1 Nouvelles sémantiques d'immutabilité de Threaded

<?php

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

        // essaie de remplacer une propriété Threaded d'une classe Threaded (invalide)
        $this->data = new stdClass();
    }
}

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

Résultat de l'exemple ci-dessus est similaire à :

RuntimeException: Threaded members previously set to Threaded objects are immutable, cannot overwrite data in %s:%d

Exemple #2 Cas d'utilisation de Volatile

<?php

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

        // essaie de remplacer une propriété Threaded d'une classe Volatile (valide)
        $this->data = new stdClass();
    }
}

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

Résultat de l'exemple ci-dessus est similaire à :

object(stdClass)#3 (0) {
}
To Top