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


Posted in PHP onFebruary 21, 2020

本文实例讲述了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();

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

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

如果确实需要对成员数据进行改写,除了上面的显式强制转换外,另一个方法就是继承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();

结果如下:

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php MySQL与分页效率
Jun 04 PHP
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
小谈php正则提取图片地址
Mar 27 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
PHP的几个常用加密函数
Feb 03 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 PHP
PHP中echo与print区别点整理
Mar 09 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 #PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 #PHP
php操作redis数据库常见方法实例总结
Feb 20 #PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 #PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 #PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 #PHP
解决windows上php xdebug 无法调试的问题
Feb 19 #PHP
You might like
第七节 类的静态成员 [7]
2006/10/09 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
python清除字符串里非字母字符的方法
2015/07/02 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Python调用Windows命令打印文件
2020/02/07 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
揠苗助长教学反思
2014/02/04 职场文书
酒店员工培训方案
2014/06/02 职场文书
物业管理专业自荐信
2014/07/01 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
家长给老师的感谢信
2015/01/20 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang