La clase Volatile

(PECL pthreads >= 3.0.0)

Introducción

La clase Volatile es nuevo en pthreads v3. Su introducción es una consecuencia de la nueva semántica de inmutabilidad de Threaded miembros de las clases Threaded. La clase Volatile permite la mutabilidad en arrays PHP en contexto 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::count(): int
public Threaded::extend(string $class): bool
public Threaded::isRunning(): bool
public Threaded::isTerminated(): bool
public Threaded::merge(mixed $from, bool $overwrite = ?): bool
public Threaded::notify(): bool
public Threaded::notifyOne(): bool
public Threaded::pop(): bool
public Threaded::run(): void
public Threaded::synchronized(Closure $block, mixed ...$args): mixed
public Threaded::wait(int $timeout = ?): bool
}

Ejemplos

Ejemplo #1 New immutability semantics of Threaded

<?php

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

        
// intenta sobrescribir una propiedad Threaded de una clase Threaded (inválida)
        
$this->data = new StdClass();
    }
}

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

El resultado del ejemplo sería algo similar a:

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

Ejemplo #2 Volatile use-case

<?php

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

        
// intenta sobrescribir una propiedad de Threaded de una clase Volatile (válida)
        
$this->data = new StdClass();
    }
}

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

El resultado del ejemplo sería algo similar a:

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

User Contributed Notes 1 note

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