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 相关文章推荐
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
PHP取得一个类的属性和方法的实现代码
May 22 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
Aug 09 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
Jan 24 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
浅谈php的优缺点
Jul 14 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
ThinkPHP实现分页功能
Apr 28 PHP
php删除数组指定元素实现代码
May 03 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 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 编程的 5个良好习惯
2009/02/20 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
javascript 必知必会之closure
2009/09/21 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
python 简易计算器程序,代码就几行
2009/08/29 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
毕业生教师求职信
2013/10/20 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
药品采购员岗位职责
2014/02/08 职场文书
安全生产责任书范本
2014/04/15 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
Python利用folium实现地图可视化
2021/05/23 Python
React如何创建组件
2021/06/27 Javascript
总结Pyinstaller打包的高级用法
2021/06/28 Python