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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
PHP调用三种数据库的方法(2)
Oct 09 PHP
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
20个PHP常用类库小结
Sep 11 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
php牛逼的面试题分享
Jan 18 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
php+ajax实现无刷新数据分页的办法
Nov 02 PHP
PHP session 会话处理函数
Jun 06 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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单例模式实现方法分析
2015/03/14 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
python将文本中的空格替换为换行的方法
2018/03/19 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
详解python深浅拷贝区别
2019/06/24 Python
Python中的类与类型示例详解
2019/07/10 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
英国家电直销:Appliances Direct
2016/09/22 全球购物
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
Java基础面试题
2014/07/19 面试题
校领导推荐信
2013/11/01 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
避暑山庄导游词
2015/02/04 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
Python实现列表拼接和去重的三种方式
2021/07/02 Python
python中__slots__节约内存的具体做法
2021/07/04 Python
vue特效之翻牌动画
2022/04/20 Vue.js
深入理解pytorch库的dockerfile
2022/06/10 Python
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技