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传输数据的代码
Nov 13 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
PHP取进制余数函数代码
Jan 19 PHP
PHP函数之日期时间函数date()使用详解
Sep 09 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
Mar 12 PHP
php实现网页端验证码功能
Jul 11 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python实现的读写json文件功能示例
2018/06/05 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
python斐波那契数列的计算方法
2018/09/27 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
路政管理毕业自荐书范文
2014/02/10 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
单位活动策划方案
2014/08/17 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
保护地球的宣传语
2015/07/13 职场文书
学生会主席任命书
2015/09/21 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js