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格式化工具Beautify PHP小小BUG
Apr 24 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
PHP rsa加密解密算法原理解析
Dec 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字符串分割函数explode的实例代码
2013/02/07 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
javascript表单验证大全
2015/08/12 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
vue2.0之多页面的开发的示例
2018/01/30 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
python基于pyDes库实现des加密的方法
2017/04/29 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
十八大报告观后感
2014/01/28 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
大一新生检讨书
2014/10/29 职场文书
2014年市场部工作总结
2014/11/25 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis