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 相关文章推荐
php4的彩蛋
Oct 09 PHP
php 远程图片保存到本地的函数类
Dec 08 PHP
php与php MySQL 之间的关系
Jul 17 PHP
php 提速工具eAccelerator 配置参数详解
May 16 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
解析php开发中的中文编码问题
Aug 08 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 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获取mysql版本的几种方法小结
2008/03/25 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
深入解答关于Python的11道基本面试题
2017/04/01 Python
python的re正则表达式实例代码
2018/01/24 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Python通过字典映射函数实现switch
2020/11/06 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
教师个人剖析材料
2014/02/05 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
音乐学专业求职信
2014/07/22 职场文书
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis