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 无法加载mysql的module的时候的配置的解决方案引发的思考
Jan 27 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
php统计文章排行示例
Mar 04 PHP
PHP获取当前完整URL地址的函数
Dec 21 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
php生成带logo二维码方法小结
Apr 08 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
Jan 22 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学习之数组值的操作
2011/04/17 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
Python中%r和%s的详解及区别
2017/03/16 Python
简单了解Python中的几种函数
2017/11/03 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
优秀大学生职业生涯规划书
2014/02/27 职场文书
环保倡议书50字
2014/05/15 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL