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修饰非静态方法,实际上是对调用该方法 ...
随机推荐
- centos 下 yum 安装 nginx 平滑切换安装到 Tengine
---恢复内容开始--- 据说淘宝的Tengine很牛X,所以我们今天也来玩玩,我们这里是某开放云的vps,现在已经安装好了nginx,现在我们要平滑切换到安装Tengine. 下载Tengine,解 ...
- zepto源码学习-06 touch
先上菜,看这个模块的最后一段代码,一看就明白. ['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 't ...
- 什么是实时应用程序自我保护(RASP)?
什么产品可以定义为 RASP? RASP 英文为 Runtime application self-protection,它是一种新型应用安全保护技术,它将保护程序想疫苗一样注入到应用程序和应用程序融 ...
- *[codility]GenomicRangeQuery
http://codility.com/demo/take-sample-test/genomicrangequery 这题有点意思.一开始以为是RMQ或者线段树,但这样要O(n*logn).考虑到只 ...
- javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD
一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...
- PieTTY
PieTTY 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 應該滿多人用 pietty 連上程 ...
- [Quick-x lua]CCLabel类数字变化动作
之前写了个C++版本的,现在改成lua的, 两者原理是一样,但是动作的执行方式有些微区别 (因为lua无法继承CCActionInterval类,单纯使用lua的话无法调用action的update方 ...
- ActionBar官方教程(11)自定义ActionBar的样式(含重要的样式属性表及练习示例)
Styling the Action Bar If you want to implement a visual design that represents your app's brand, th ...
- 基于LAMP平台的网站架构(或Web系统架构)
1.网站架构的前提(或者说需求) 我们公司是一电子商务的网站,因为线下家具建材项目的推广需求,从而有了我们公司的这个线上网站,在这里我贴一张公司的网站架构图. 总体来说网站规模不是太大,注册人数在15 ...
- Case Studies: Retail and Investment Banks Use of Social Media
The past couple of months have seen an increased acknowledgement of the role social media has to pla ...