php静态方法与非静态方法在性能上有什么区别?
先贴代码如下:
class class1
{
public static function test(){}
}
class class2
{
public function test(){}
} var_export(-1111111111111111111);
//代码段1
//写法1
class1::test();
var_export(-1111111111111111111);
//代码段2
//写法2
$c2 = new class2();
$c2->test();
var_export(-1111111111111111111);
//代码段3
$c2->test();
var_export(-1111111111111111111);
写法1和写法2到底有什么不同呢,其本质就是一个是静态方法,一个是非静态方法。
个人平时喜欢用写法1
原因一:只有一行,看着好看。
原因二:可能性能会好一些。
但性能的比较实在是无从下手,如果看执行时间的话,我想是永远也看不出来,因为时间肯定太小了,没法统计。
但想统计,总会有方法,可以使用gdb调试工具来统计c语言代码的行数来粗略的估计
原理:
php的var_export函数,在C代码中对应是sapi_cli_single_write。所以可以在sapi_cli_single_write函数上,设置一个断点。然后利用gdb的单步执行,来统计每个断点之间的代码行数。
步骤如下:
1,构造测试用的PHP脚本,如上方所示。
2,构造测试用的gdb脚本gdb.input,如下:
b sapi_cli_single_write
r /home/users/huangxuan01/test.php
s
s
....//以下是10000个s,代表10000个单步执行,也代表10000行C语言代码,应该够用了
解释:
b sapi_cli_single_write 就代表在var_export处设置断点
r /home/users/huangxuan01/test.php 就代表运行测试php脚本。
3,执行以下命令
gdb php < gdb.input >gdb.output
4,统计gdb.output文件,如下:
(gdb) -271 } while (ret <= && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO TSRMLS_CC));
(gdb) ret = write(STDOUT_FILENO, str, str_length);
(gdb) } while (ret <= && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO TSRMLS_CC));
(gdb) return ret; ........ (gdb) -271 } while (ret <= && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO TSRMLS_CC));
(gdb) ret = write(STDOUT_FILENO, str, str_length);
(gdb) } while (ret <= && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO TSRMLS_CC));
(gdb) return ret;
重点是-11111111111111,已经飘红。然后统计gdb.output中,-1111111111111之间的行数,就可以粗略的统计写法1和写法2的性能了,结果如下:
代码段1:754
代码段2:1174
代码段3:747
可以看出来写法2比写法1多执行了55.7%的代码,因为C语言要经过编译,所以只能说是粗略的统计代码的行数。
所以为了美观和性能的考虑,我还是坚持写法1。
至于到底有什么区别,那就得熟悉熟悉PHP的实现了。
php静态方法与非静态方法在性能上有什么区别?的更多相关文章
- 在静态方法和非静态方法上加 Synchronized的区别
Synchronzied 修饰非静态方法==>对象锁 Synchronzied 修饰静态方法==>其实是类锁,因为是静态方法,它把整个类锁起来了: 1.Synchronized修饰非静态方 ...
- Java中synchronized用在静态方法和非静态方法上面的区别
synchronized 修饰在 static方法和非static方法的区别 在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法.也可以sync ...
- Java中堆、栈,静态方法和非静态方法的速度问题
一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储 ...
- 转 C#中静态方法与非静态方法区别比较
C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...
- C#静态类 静态方法与非静态方法比较
静态类 在类(class)上加入static修饰,表示该类无法被实例化,并将该类中,无法实例化变量或函数 静态类的主要特性 仅包含静态成员 无法实例化 静态类的本质,时一个抽象的密封类,所以不能被继承 ...
- [转]C#静态方法与非静态方法的比较
http://wenku.baidu.com/view/4e1704084a7302768e9939e0.html C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他 ...
- java中静态方法和非静态方法调用的一点小困扰,已解决。
public static void main(String[] args) { // TODO Auto-generated method stub SimpleGui1B gui=new Simp ...
- c#静态方法和非静态方法区别
c#静态方法和非静态方法区别 C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为 ...
- C#中静态方法和非静态方法的区别
静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为overri ...
- 使用synchronized修饰静态方法和非静态方法有什么区别
前言 最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录.供大家学习参考. Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法 ...
随机推荐
- IOS 获得通讯录中联系人的所有属性 备用参考
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...
- ios coredata 老代码备用参考
iPhone OS在2009年6月份推出3.0版本SDK,其中一个特性是引入了Mac SDK中的core data.是一种ORM(Object Relationships Mapping)解决方案,类 ...
- MSCRM4.0如何使js事件在批量编辑表单中触发
MSCRM4.0如何使js事件在批量编辑表单中触发 MSCRM4.0如何使js事件在批量编辑表单中触发 MSCRM3.0我们可以通过在onload事件加入以下代码来控制某个属性为只读.crmForm. ...
- Moloch
http://www.oschina.net/p/moloch maltego http://www.oschina.net/p/maltego
- bitset学习小记
Cplusplus官网的资料: http://www.cplusplus.com/reference/bitset/bitset/ http://www.cplusplus.com/reference ...
- 企业2.0杀出一号种子选手 “Linkwedo”横空出世
当下,最热门的话题就是企业2.0和1.0的新老交替,在过去的时间里OA在国内几乎是企业1.0的代名词,各大知名OA厂商一直占领着国内的企业市场,但企业2.0在全球越演越烈,甚至大有替代企业1.0的的迹 ...
- ccleaner的专业版和商业版的注册码
名称:Registered User 密钥:CBB4-FJN4-EPC6-G5P6-QT4C 断网注册
- BZOJ_2049_[Sdoi_2008]_Cave_洞穴勘测_(LCT/并查集)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2049 给出一个森林,起始互不相连,现在有link和cut两种操作,问x,y是否在一棵树里. 分 ...
- [swustoj 594] Maximum Tape Utilization Ratio
Maximum Tape Utilization Ratio(0594) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 467 Ac ...
- 【转】Optiplex 7010驱动下载链接(XP&Windows7
原文网址:http://zh.community.dell.com/support_forums/desktops/f/236/t/2606 x 7010驱动下载链接(XP&Windows7) ...