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 输出简单动态WAP页面
Jun 09 PHP
PHP模板解析类实例
Jul 09 PHP
PHP语法小结之基础和变量
Nov 22 PHP
PHP如何将XML转成数组
Apr 04 PHP
PHP.vs.JAVA
Apr 29 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
php判断数组是否为空的实例方法
May 10 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 和 COM
2006/10/09 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
实例解析php的数据类型
2018/10/24 PHP
几个高效,简洁的字符处理函数
2007/04/12 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
Python中除法使用的注意事项
2014/08/21 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
Python restful框架接口开发实现
2020/04/13 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
英国最大的海报商店:GB Posters
2018/03/20 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
内科护士实习自我鉴定
2013/10/17 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
小学语文课后反思精选
2014/04/25 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
干部作风建设心得体会
2014/10/22 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
春风化雨观后感
2015/06/11 职场文书
子女赡养老人协议书
2016/03/23 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python