因为有好几个项目等着做,又不是很急,再加上目前成型的那些框架多多少少用着总是有点不太如意,所以决定先自己写一个框架,然后再做项目。既然写框架,自然要经常做一些执行效率上的测试,今天做了一个static效率的测试。
类的定义如下:
class test{ public static function a(){} public function b(){}}
比较以下几种情况
test::a(); $obj->a(); $obj->b(); 测试代码:
$obj = new test;$test_times = 100;$times = 10000;$effi1 = array();$effi2 = array();while ($test_times-- > 0){ $time1 = microtime(true); for($i=0; $i10)次,都与这个结果相差不大,说明:
直接通过类名访问静态方法的效率是通过实例访问静态方法的76%,甚至用php5.3时只有56% 通过实例访问静态方法的效率是访问非静态成员方法效率的106,在5.3版本变成110% 假设php从5.2升级到5.3时通过类名访问静态方法的效率没有降低,那么通过实例访问函数的效率至少提高了35%。我没看过php源码,有研究过php源码的朋友希望能告诉我这个假设是否成立 (我想应该是成立的)说明:以上测试基于windows 7和php.exe,5.2.14使用了apache2.2测试结果没有区别,考虑到php.exe和通过web访问所执行的php核心是一样的,所以5.3懒得改服务器配置了,结果应该一样。