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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
一个简单实现多条件查询的例子
Oct 09 PHP
php preg_match_all结合str_replace替换内容中所有img
Oct 11 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
php微信开发之关键词回复功能
Jun 13 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
详解thinkphp的Auth类认证
May 28 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
Windows下的PHP5.0详解
2006/11/18 PHP
phpize的深入理解
2013/06/03 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
PDO::errorInfo讲解
2019/01/28 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
javascript 跳转代码集合
2009/12/03 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
python实现复制文件到指定目录
2019/10/16 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
学生个人的自我评价分享
2013/11/05 职场文书
化工专业应届生求职信
2013/11/08 职场文书
经销商会议欢迎词
2014/01/11 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
称象教学反思
2014/02/03 职场文书
法人委托书范本
2014/04/04 职场文书
学校文明单位申报材料
2014/05/06 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书