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获取MAC地址的函数代码
Sep 11 PHP
php获取域名的google收录示例
Mar 24 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php通过记录IP来防止表单重复提交方法分析
Dec 16 PHP
推荐几个开源的微信开发项目
Dec 28 PHP
PHP中list方法用法示例
Dec 01 PHP
PHP中常用的魔术方法
Apr 28 PHP
PHP 中魔术常量的实例详解
Oct 26 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 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 时间转换Unix时间戳代码
2010/01/22 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
php 注册时输入信息验证器的实现详解
2013/07/05 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
python读取html中指定元素生成excle文件示例
2014/04/03 Python
跟老齐学Python之复习if语句
2014/10/02 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
Python 多线程实例详解
2017/03/25 Python
简述Python2与Python3的不同点
2018/01/21 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
python 两个数据库postgresql对比
2019/10/21 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
python 实现dict转json并保存文件
2019/12/05 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python