我又写了一个文件.再测之:
- <?php
- function signin()
- {
- return "null";
- }
- class User
- {
- public function signin()
- {
- return "null";
- }
- }
- function time1()
- {
- $arr=split(" ",microtime());
- return $arr[1]+$arr[0];
- }
- $t1= time1();
- for($i=0;$i<100000;$i++)
- signin();
- $t2=time1();
- for($i=0;$i<100000;$i++)
- User::signin();
- $t3=time1();
- echo "
- function:".($t2-$t1)."ms
- class:".($t3-$t2)."ms";
这是结果:
- function:0.071924924850464ms
- class:0.23149108886719ms
为了避免程序运行顺序的影响,我们再运行一次,这次先测静态类的,再测function的:
- <?php
- function signin()
- {
- return "null";
- }
- class User
- {
- public function signin()
- {
- return "null";
- }
- }
- function time1()
- {
- $arr=split(" ",microtime());
- return $arr[1]+$arr[0];
- }
- $t1= time1();
- for($i=0;$i<100000;$i++)
- User::signin();
- $t2=time1();
- for($i=0;$i<100000;$i++)
- signin();
- $t3=time1();
- echo "
- function:".($t3-$t2)."ms
- class:".($t2-$t1)."ms";
这次测的时间如下:
- function:0.072422027587891ms
- class:0.26213884353638ms
从这个结果来看,php的function还是相当快的,比class,哪怕是静态方法要快。
看来我越来越喜欢用function的路子是对的。
后来我加上另一个,把整个结果贴出来:
- $obj=& new User();
- $t1= time1();
- for($i=0;$i<100000;$i++)
- User::signin();
- $t2=time1();
- for($i=0;$i<100000;$i++)
- signin();
- $t3=time1();
- for($i=0;$i<100000;$i++)
- $obj->signin();
- $t4=time1();
- for($i=0;$i<100000;$i++)
- {
- $obj1=& new User();
- $obj1->signin();
- }
- $t5=time1();
- echo "
- function:".($t3-$t2)."ms
- class:".($t2-$t1)."ms
- object:".($t4-$t3)."ms
- new object:".($t5-$t4)."ms";
结果是:
- function:0.071459054946899ms
- class:0.23710894584656ms
- object:0.08794093132019ms
- new object:0.17567801475525ms
也就是说,直接调用function是最快的,其次是重复调用已存在对象的方法,仅比纯function慢一点点。
接着是先新建class的实例再调用方法,最慢的是直接调用静态方法。
这个结果有一点点出乎我的意料,我没料到静态方法是最慢的一个。
Tag: