(PECL pthreads >= 3.0.0)
Класс Volatile появился в pthreads v3. Его введение является следствием новой семантики неизменности Threaded -свойств классов Threaded . Класс Volatile включает иммутабельность их Threaded -свойств и, также, используется для хранения массивов PHP в контексте Threaded .
Пример #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) {
}
<?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; }
}
?>