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开发文件系统实例讲解
Oct 09 PHP
php二分法在IP地址查询中的应用
Aug 12 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
让PHP显示Facebook的粉丝数量方法
Jan 08 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
php实现映射操作实例详解
Oct 02 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 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 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python生成验证码图片代码分享
2016/01/28 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python requests 使用快速入门
2017/08/31 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
标准毕业生自荐信范文
2013/11/04 职场文书
保护环境倡议书500字
2014/05/19 职场文书
工作求职信
2014/07/04 职场文书
上学路上观后感
2015/06/16 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python
win10清理dns缓存
2022/04/19 数码科技
Java使用HttpClient实现文件下载
2022/08/14 Java/Android