PHP静态延迟绑定和普通静态效率的对比


Posted in PHP onOctober 20, 2017

PHP静态延迟绑定和普通静态效率的对比

只是一个简单的小实验,对比了下 延迟绑定 和 非延迟的效率

延迟绑定主要就是使用 static 关键字来替代原来的 self ,但功能非常强大了

实验代码:

class A { 
  protected static $cc1 = array('a1', 'b', 'c', 'd'); 
  protected static $cc2 = array('a2', 'b', 'c', 'd'); 
  protected static $cc3 = array('a3', 'b', 'c', 'd'); 
  protected static $cc4 = array('a4', 'b', 'c', 'd'); 
  protected static $cc5 = array('a5', 'b', 'c', 'd'); 
 
  public static function n1() { 
    return static::$cc1; 
  } 
  public static function n2() { 
    return static::$cc2; 
  } 
  public static function n3() { 
    return static::$cc3; 
  } 
  public static function n4() { 
    return static::$cc4; 
  } 
  public static function n5() { 
    return static::$cc5; 
  } 
} 
 
class C extends A { 
 
} 
 
class B { 
  protected static $cc1 = array('a1', 'b', 'c', 'd'); 
  protected static $cc2 = array('a2', 'b', 'c', 'd'); 
  protected static $cc3 = array('a3', 'b', 'c', 'd'); 
  protected static $cc4 = array('a4', 'b', 'c', 'd'); 
  protected static $cc5 = array('a5', 'b', 'c', 'd'); 
 
  public static function n1() { 
    return self::$cc1; 
  } 
  public static function n2() { 
    return self::$cc2; 
  } 
  public static function n3() { 
    return self::$cc3; 
  } 
  public static function n4() { 
    return self::$cc4; 
  } 
  public static function n5() { 
    return self::$cc5; 
  } 
}

上面总共 A 、B 、C 三个类,里面全是静态成员变量和方法,其中

A 类是使用了静态延迟,
B 类是非延迟,
C 类是继承A类实现了静态成员变量和方法的延迟绑定。

过程也不多说了,环境是 PHP5.4.27 直接上测试结果:

有两种情况,

1. 当只有 A、B类(也就是不让任何类继承A类)时,效率上几乎没有差别的

2. 当A类被C类继承了之后,使用静态延迟绑定的A类性能将会比 B类稍差一些(只要A类有了继承的类就会变慢)

循环十万次,耗时在 2.8s ~ 3.2s 之间 时间差距在 0.3 秒左右,应该还是可以忽略不计了吧

补充个:后来加了些测试方法,如果 C 类继承 A 类后,重载了部分 A 类中的静态成员变量,重载的越多则速度和 B 类(非延迟)就越接近,但 A 类的速度仍然会比 B 类 和 C 类慢

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
php 调试利器debug_print_backtrace()
Jul 23 PHP
PHP文件大小格式化函数合集
Mar 10 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
smarty简单分页的实现方法
Oct 27 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
PHP实现过滤各种HTML标签
May 17 PHP
php实现转换ubb代码的方法
Jun 18 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
PHP explode()函数用法讲解
Feb 15 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
php正则表达式使用方法整理集合
Jan 31 PHP
php+ajax实现仿百度查询下拉内容功能示例
Oct 20 #PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 #PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 #PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 #PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 #PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 #PHP
PHP自定义函数实现数组比较功能示例
Oct 19 #PHP
You might like
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
提升Python程序性能的7个习惯
2019/04/14 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
python 实现客户端与服务端的通信
2020/12/23 Python
构建高效课堂实施方案
2014/03/13 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
2014年售票员工作总结
2014/11/19 职场文书
团拜会主持词
2015/07/04 职场文书
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android