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的面试题集
Nov 19 PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
May 02 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
php+mysql实现数据库随机重排实例
Oct 17 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 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 Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
javascript计时器详解
2015/02/28 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python组合无重复三位数的实例
2018/11/13 Python
django如何实现视图重定向
2019/07/24 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
Django实现内容缓存实例方法
2020/06/30 Python
详解Python多线程下的list
2020/07/03 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
白酒业务员岗位职责
2013/12/27 职场文书
承办会议欢迎词
2014/01/17 职场文书
yy司仪主持词
2014/03/22 职场文书
铁路安全事故反思
2014/04/26 职场文书
研究生简历自我评
2015/03/11 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
2022微信温控新功能上线
2022/05/09 数码科技