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
PHP_MySQL教程-第一天
Mar 18 PHP
深入PHP FTP类的详解
Jun 13 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PDO::quote讲解
Jan 29 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
php实现微信和支付宝支付的示例代码
Aug 11 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
Wordpress php 分页代码
2009/10/21 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
js中replace的用法总结
2013/12/27 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
Python建立Map写Excel表实例解析
2018/01/17 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python多线程分块读取文件
2019/08/29 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
网络教育自我鉴定
2013/11/01 职场文书
入党积极分子思想汇报
2014/01/02 职场文书
保护环境倡议书范文
2014/05/13 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
2015年工商所工作总结
2015/05/21 职场文书
入党介绍人意见2015
2015/06/01 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server