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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
ThinkPHP中实例Model方法的区别说明
Aug 21 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
PHP7修改的函数
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
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
List Installed Hot Fixes
2007/06/12 Javascript
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
javascript 常用代码技巧大收集
2009/02/25 Javascript
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
小程序实现多选框功能
2018/10/30 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
通过实例了解python property属性
2019/11/01 Python
什么是Python变量作用域
2020/06/03 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
中文教师求职信
2014/02/22 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
销售员试用期自我评价
2014/09/15 职场文书
教师个人成长总结
2015/02/11 职场文书
李白故里导游词
2015/02/12 职场文书
员工辞职信范文
2015/03/02 职场文书
支教个人总结
2015/03/04 职场文书
工程进度款催款函
2015/06/24 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书