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 特殊字符处理函数
Sep 05 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
PHP实现简单数字分页效果
Jul 26 PHP
php处理复杂xml数据示例
Jul 11 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
PHP文件与目录操作示例
Dec 24 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 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的聊天室设计
2006/10/09 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
php的ajax简单实例
2014/02/27 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
详解PHP队列的实现
2019/03/14 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
js 编写规范
2010/03/03 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python中replace方法实例分析
2014/08/20 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
python文字转语音实现过程解析
2019/11/12 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
员工安全生产责任书
2014/07/22 职场文书
学习教师法的心得体会
2014/09/03 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
python接口测试返回数据为字典取值方式
2022/02/12 Python