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 设计模式之 工厂模式
Dec 19 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
php绘制一条直线的方法
Jan 24 PHP
Laravel 5 框架入门(一)
Apr 09 PHP
PHP实现的购物车类实例
Jun 17 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 PHP
thinkPHP分页功能实例详解
May 05 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
php利用array_search与array_column实现二维数组查找
Jul 08 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 MYSQL中插入当前时间
2008/04/06 PHP
PHP 判断变量类型实现代码
2009/10/23 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
php字符串过滤与替换小结
2015/01/26 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
JavaScript 绘制饼图的示例
2021/02/19 Javascript
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
接口可以包含哪些成员
2012/09/30 面试题
大学生自我鉴定
2013/12/08 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
高中班主任心得体会
2016/01/07 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript