PHP 8.5.0 RC 2 available for testing

La clase Volatile

(PECL pthreads >= 3.0.0)

Introducción

La clase Volatile es nueva en pthreads v3. Su introducción es una consecuencia de las nuevas semánticas de inmutabilidad de los miembros Threaded de las clases Threaded. La clase Volatile permite la mutabilidad de sus miembros Threaded, y es igualmente utilizada para almacenar arrays PHP en contextos Threaded.

Sinopsis de la Clase

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

Ejemplos

Ejemplo #1 Nuevas semánticas de inmutabilidad de Threaded

<?php

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

// intenta reemplazar una propiedad Threaded de una clase Threaded (inválido)
$this->data = new stdClass();
}
}

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

Resultado del ejemplo anterior es similar a :

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

Ejemplo #2 Caso de uso de Volatile

<?php

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

// intenta reemplazar una propiedad Threaded de una clase Volatile (válido)
$this->data = new stdClass();
}
}

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

Resultado del ejemplo anterior es similar a :

object(stdClass)#3 (0) {
}
add a note

User Contributed Notes 1 note

up
1
synnus at gmail dot com
6 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