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 文件上传进度条的两种实现方法的代码
Nov 25 PHP
网友原创的PHP模板类代码
Sep 07 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 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与XML联手进行网站编程代码实例
2008/07/10 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python自定义线程池实现方法分析
2018/02/07 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
升职自荐信
2013/11/28 职场文书
客服主管岗位职责
2013/12/13 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
AJAX学习笔记
2021/05/18 Javascript
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server