PHP 8.6.0 Beta 1 is available for testing

Класс Volatile

(PECL pthreads >= 3.0.0)

Введение

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

Обзор класса

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

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 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; }
}
?>
+Добавить

AltStyle によって変換されたページ (->オリジナル) /