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(2)
Oct 09 PHP
php 函数使用方法与函数定义方法
May 09 PHP
php 代码优化之经典示例
Mar 24 PHP
PHP If Else(elsefi) 语句
Apr 07 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
php控制文件下载速度的方法
Mar 24 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
wordpress网站转移到本地运行测试的方法
Mar 15 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
详解PHP队列的实现
Mar 14 PHP
PHP使用Redis实现Session共享的实现示例
May 12 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合并数组+与array_merge的区别分析
2010/08/01 PHP
利用PHP实现短域名互转
2013/07/05 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
php实现json编码的方法
2015/07/30 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
js常用DOM方法详解
2017/02/04 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
家长对学生的评语
2014/04/18 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers