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 相关文章推荐
PHP5+UTF8多文件上传类
Oct 17 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 PHP
php 过滤英文标点符号及过滤中文标点符号代码
Jun 12 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
在laravel中实现事务回滚的方法
Oct 10 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 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
如何做到多笔资料的同步
2006/10/09 PHP
自动分页的不完整解决方案
2007/01/12 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
浅析JavaScript动画
2015/06/10 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
Python解决八皇后问题示例
2018/04/22 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
出纳岗位职责
2013/11/09 职场文书
资产经营总监岗位职责
2013/12/04 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Nginx快速入门教程
2021/03/31 Servers