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 和 MYSQL
Oct 09 PHP
网站当前的在线人数
Oct 09 PHP
WHOIS类的修改版
Oct 09 PHP
PHP的分页功能
Mar 21 PHP
PHP排序算法的复习和总结
Feb 15 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP中str_split()函数的用法讲解
Apr 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
js function定义函数使用心得
2010/04/15 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python实现的归并排序算法示例
2017/11/21 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
高级电工工作职责
2013/11/21 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
计算机个人求职信范例
2014/01/24 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
家长会标语
2014/06/24 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
离职证明范本
2015/06/12 职场文书
公司庆典主持词
2015/07/04 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
MySQL中varchar和char类型的区别
2021/11/17 MySQL