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中,文件上传
Dec 06 PHP
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
PHP引用返回用法示例
May 28 PHP
PHP单态模式简单用法示例
Nov 16 PHP
利用php生成验证码
Feb 23 PHP
PHP策略模式定义与用法示例
Jul 27 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/09/06 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python使用多线程不断刷新网页的方法
2015/03/31 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
python中如何进行连乘计算
2020/05/28 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
保安员岗位职责
2013/11/17 职场文书
出差报告格式模板
2014/11/06 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
防暑降温通知书
2015/04/27 职场文书
调解书格式范本
2015/05/20 职场文书
同意报考公务员证明
2015/06/17 职场文书
校运会广播稿
2015/08/19 职场文书
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电