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 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
解析php防止form重复提交的方法
Jul 01 PHP
Linux编译升级php的详细方法
Nov 04 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
php数组函数array_walk用法示例
May 26 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
详解PHP处理密码的几种方式
Nov 30 PHP
Smarty3配置及入门语法
Feb 22 PHP
PHP实现提取多维数组指定一列的方法总结
Dec 04 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动态读取数据清除最右边距的方法
2017/04/12 PHP
PHP7 新增功能
2021/03/09 PHP
Array对象方法参考
2006/10/03 Javascript
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
js 巧妙去除数组中的重复项
2010/01/25 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Python中的pack和unpack的使用
2018/03/12 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
2018/05/07 Python
Python数据类型之List列表实例详解
2019/05/08 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
wxPython色环电阻计算器
2019/11/18 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
如何清空Session
2015/02/23 面试题
水产养殖学应届生求职信
2013/09/29 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
护士自我鉴定总结
2014/03/24 职场文书
班级年度安全计划书
2014/05/01 职场文书
本科生就业推荐信
2014/05/19 职场文书
项目转让协议书
2014/10/27 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers