A classe Volatile

(PECL pthreads >= 3.0.0)

Introdução

A classe Volatile é nova no pthreads v3. Sua introdução é consequência da nova semântica de imutabilidade dos membros Threaded das classes Threaded. A classe Volatile permite a mutabilidade de seus membros Threaded e também é usada para armazenar arrays PHP em contextos Threaded.

Resumo da classe

class Volatile extends Threaded implements Collectable, Traversable {
/* Métodos herdados */
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
}

Exemplos

Exemplo #1 Nova semântica de imutabilidade do Threaded

<?php

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

// tentativa de substituir uma propriedade Threaded de uma classe Threaded (inválida)
$this->data = new stdClass();
}
}

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

O exemplo acima produzirá algo semelhante a:

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

Exemplo #2 Volatile use-case

<?php

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

// tentativa de substituir uma propriedade Threaded de uma classe Volatile (válido)
$this->data = new stdClass();
}
}

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

O exemplo acima produzirá algo semelhante a:

object(stdClass)#3 (0) {
}
adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
1
synnus at gmail dot com
5 years ago
<?php// just use extends  volatile for use array// is verry good class libvar extends Volatile{    private $_adresse = '127.0.0.1';    private $_port = 10000;        public $socket;    public $list_socket = array();    public $list_error = array();        public function __construct(){ }        public function set_list($val) { $ct = count($this->list_socket); $this->list_socket[ $ct ] = $val; return $ct; }    public function set_socket($val) { $this->socket = $val; return $this->socket; }    public function set_error($val) { $this->list_error[ count($this->list_error) ] = $val; }        public function unset_list($val) { unset($this->list_error[ $val ]); }    public function get_socketinlist($val) { return $this->list_socket[$val]; }    public function get_adresse() { return $this->_adresse; }    public function get_port() { return $this->_port; }    public function get_socket() { return $this->socket; }}?>
To Top