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.MVC的模板标签系统(二)
Sep 05 PHP
phpwind中的数据库操作类
Jan 02 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
May 16 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 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 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
Opacity.js
2007/01/22 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
页面点击小红心js实现代码
2018/05/26 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
python 二维数组90度旋转的方法
2019/01/28 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
党员承诺书格式
2014/05/21 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
2019个人半年工作总结
2019/06/21 职场文书