Класс Volatile

(PECL pthreads >= 3.0.0)

Введение

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

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

Volatile extends Threaded implements Collectable , Traversable {
/* Наследуемые методы */
public Threaded::chunk ( int $size , bool $preserve ) : array
public Threaded::count ( void ) : int
public Threaded::extend ( string $class ) : bool
public Threaded::from ( Closure $run [, Closure $construct [, array $args ]] ) : Threaded
public Threaded::getTerminationInfo ( void ) : array
public Threaded::isRunning ( void ) : bool
public Threaded::isTerminated ( void ) : bool
public Threaded::isWaiting ( void ) : bool
public Threaded::lock ( void ) : bool
public Threaded::merge ( mixed $from [, bool $overwrite ] ) : bool
public Threaded::notify ( void ) : bool
public Threaded::notifyOne ( void ) : bool
public Threaded::pop ( void ) : bool
public Threaded::run ( void ) : void
public Threaded::shift ( void ) : mixed
public Threaded::synchronized ( Closure $block [, mixed $... ] ) : mixed
public Threaded::unlock ( void ) : bool
public Threaded::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) {
}
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top