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调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
php阳历转农历优化版
Aug 08 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 PHP
php实现的生成排列算法示例
Jul 25 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 MySQL与分页效率
2008/06/04 PHP
php 变量定义方法
2009/06/14 PHP
PHP多例模式介绍
2013/06/24 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
动态加载JS文件的三种方法
2013/11/08 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
Javascript复制实例详解
2016/01/28 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
JS实现小星星特效
2019/12/24 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
详解Python中find()方法的使用
2015/05/18 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
python将字符串转换成json的方法小结
2019/07/09 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
比驿:全球酒店比价网
2018/06/20 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
劳资人员岗位职责
2013/12/19 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
python通过新建环境安装tfx的问题
2022/05/20 Python