当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP pthreads v3下的Volatile简介与使用方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-13 12:59:08 浏览: 评论:0 

本文实例讲述了PHP pthreads v3下的Volatile简介与使用方法,分享给大家供大家参考,具体如下:

由于pthreads v3中引入了Threaded对象自动不变性的概念,所以当我们在构造函数中给成员设置为数组时,在其他地方就无法对成员再次改写了。

例子如下:

  1. <?php 
  2.  
  3. //pthreads v3引入了Threaded对象自动不变性的概念 
  4. //如果成员被设置成Threaded对象,那么它将不能被再次改写 
  5. //当然,这主要还是为了性能优化,但有时我们又需要改写成员,那么就需要继承自Volatile类了 
  6. class Task extends Thread 
  7.   private $data
  8.   private $result
  9.  
  10.   public function __construct() 
  11.   { 
  12.     $this->data = 'abc'
  13.     var_dump($this->data); 
  14.  
  15.     //成员设置成标量,是可以再次被改写的 
  16.     $this->data = 'def'
  17.     var_dump($this->data); 
  18.  
  19.     //这里给data设置为数组时,会自动转换成Volatile对象 
  20.     $this->data = [1, 2, 3]; 
  21.     var_dump($this->data); 
  22.  
  23.     //这个时候再给data赋值时,就会报错了 
  24.     //成员被设置成Threaded对象时(Volatile继承自Threaded),该成员就不能再次被改写了 
  25.     $this->data = [4, 5, 6]; 
  26.     var_dump($this->data); 
  27.  
  28.     //当然,我们可以显式的强制转换,不让Threaded帮我自动转成Volatile对象 
  29.     $this->result = (array)[1, 2, 3]; 
  30.     //打印出来是数组 
  31.     var_dump($this->result); 
  32.     $this->result = (array)[4, 5, 6]; 
  33.     //成员赋值成功 
  34.     var_dump($this->result); 
  35.   } 
  36.  
  37. new Task(); 

如果我们对成员再次进行改写,那么就会报错了。

PHP pthreads v3下的Volatile简介与使用方法示例

如果确实需要对成员数据进行改写,除了上面的显式强制转换外,另一个方法就是继承Volatile类了。

例子如下:

  1. <?php 
  2.  
  3. //Volatile类允许其成员可更改 
  4. class Task extends Volatile 
  5.   private $data
  6.  
  7.   public function __construct() 
  8.   { 
  9.     //继承自Volatile类后,我们的成员在设置成Threaded对象后,仍可改写 
  10.     $this->data = [ 
  11.       'a' => 123, 
  12.       'b' => 456, 
  13.       'c' => 789, 
  14.     ]; 
  15.     var_dump($this->data); 
  16.  
  17.     //这里成员数据成功被改写 
  18.     $this->data = [ 
  19.       'a' => 'aaa'
  20.       'b' => 'bbb'
  21.       'c' => 'ccc'
  22.     ]; 
  23.     var_dump($this->data); 
  24.  
  25.     //由于Threaded对象实现了ArrayAccess接口,我们可以像访问数组一样,访问Volatile对象 
  26.     echo $this->data['a'], "\t"$this->data['b'], "\t"$this->data['c'], "\n"
  27.  
  28.     foreach ($this->data as $item) { 
  29.       echo $item"\n"
  30.     } 
  31.   } 
  32.  
  33. new Task(); 

结果如下:

PHP pthreads v3下的Volatile简介与使用方法示例

Tags: pthreads Volatile

分享到: