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 相关文章推荐
服务器端解压缩zip的脚本
Dec 22 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
php实现随机显示图片方法汇总
May 21 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
PHP goto语句用法实例
Aug 06 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
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
python paramiko实现ssh远程访问的方法
2013/12/03 Python
Python的randrange()方法使用教程
2015/05/15 Python
python中cPickle类使用方法详解
2018/08/27 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
django使用LDAP验证的方法示例
2018/12/10 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
启动一个线程是用run()还是start()
2016/12/25 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
管理站站长岗位职责
2013/11/27 职场文书
中专自我鉴定
2014/02/05 职场文书
《口技》教学反思
2014/02/21 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
遗产继承公证书
2014/04/09 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
回复函范文
2015/07/14 职场文书