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 相关文章推荐
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
如何让CI框架支持service层
Oct 29 PHP
ThinkPHP模板中数组循环实例
Oct 30 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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中的Class的几点个人看法
2006/10/09 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
python装饰器代替set get方法实例
2019/12/19 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
工程承包协议书
2014/04/22 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
会议室使用管理制度
2015/08/06 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书