PHP pthreads v3下的Volatile简介与使用方法示例
程序员文章站
2022-05-25 23:01:33
本文实例讲述了php pthreads v3下的volatile简介与使用方法。分享给大家供大家参考,具体如下:由于pthreads v3中引入了threaded对象自动不变性的概念,所以当我们在构造...
本文实例讲述了php pthreads v3下的volatile简介与使用方法。分享给大家供大家参考,具体如下:
由于pthreads v3中引入了threaded对象自动不变性的概念,所以当我们在构造函数中给成员设置为数组时,在其他地方就无法对成员再次改写了。
例子如下:
<?php //pthreads v3引入了threaded对象自动不变性的概念 //如果成员被设置成threaded对象,那么它将不能被再次改写 //当然,这主要还是为了性能优化,但有时我们又需要改写成员,那么就需要继承自volatile类了 class task extends thread { private $data; private $result; public function __construct() { $this->data = 'abc'; var_dump($this->data); //成员设置成标量,是可以再次被改写的 $this->data = 'def'; var_dump($this->data); //这里给data设置为数组时,会自动转换成volatile对象 $this->data = [1, 2, 3]; var_dump($this->data); //这个时候再给data赋值时,就会报错了 //成员被设置成threaded对象时(volatile继承自threaded),该成员就不能再次被改写了 $this->data = [4, 5, 6]; var_dump($this->data); //当然,我们可以显式的强制转换,不让threaded帮我自动转成volatile对象 $this->result = (array)[1, 2, 3]; //打印出来是数组 var_dump($this->result); $this->result = (array)[4, 5, 6]; //成员赋值成功 var_dump($this->result); } } new task();
如果我们对成员再次进行改写,那么就会报错了。
如果确实需要对成员数据进行改写,除了上面的显式强制转换外,另一个方法就是继承volatile类了。
例子如下:
<?php //volatile类允许其成员可更改 class task extends volatile { private $data; public function __construct() { //继承自volatile类后,我们的成员在设置成threaded对象后,仍可改写 $this->data = [ 'a' => 123, 'b' => 456, 'c' => 789, ]; var_dump($this->data); //这里成员数据成功被改写 $this->data = [ 'a' => 'aaa', 'b' => 'bbb', 'c' => 'ccc', ]; var_dump($this->data); //由于threaded对象实现了arrayaccess接口,我们可以像访问数组一样,访问volatile对象 echo $this->data['a'], "\t", $this->data['b'], "\t", $this->data['c'], "\n"; foreach ($this->data as $item) { echo $item, "\n"; } } } new task();
结果如下:
下一篇: 香菜对肾脏的危害再不知道就晚了!