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执行速度全攻略(下)
Oct 09 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
php无限极分类实现的两种解决方法
Apr 28 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
PHP处理Oracle的CLOB实例
Nov 03 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
基于php伪静态的实现方法解析
Jul 31 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递归使用示例(php递归函数)
2014/02/14 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
了解重排与重绘
2019/05/29 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python中删除某个元素的方法解析
2019/11/05 Python
python创建学生管理系统
2019/11/22 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
护理学应聘自荐书范文
2014/02/05 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
要账委托书范本
2014/09/15 职场文书
婚内房产协议书范本
2014/10/02 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript