【发布时间】:2011-06-14 09:02:33
【问题描述】:
编辑::哦我忘了
class Test1{
public static function test(){
for($i=0; $i<=1000; $i++)
$j += $i;
}
}
class Test2{
public function test() {
for ($i=0; $i<=1000; $i++){
$j += $i;
}
}
}
对于这个算法
$time_start = microtime();
$test1 = new Test2();
for($i=0; $i<=100;$i++)
$test1->test();
$time_end = microtime();
$time1 = $time_end - $time_start;
$time_start = microtime();
for($i=0; $i<=100;$i++)
Test1::test();
$time_end = microtime();
$time2 = $time_end - $time_start;
$time = $time1 - $time2;
echo "Difference: $time";
我有结果
Difference: 0.007561
这些天来,我正在尝试使我的方法尽可能地静态化。但这是真的吗,.. 至少对于 php
【问题讨论】:
-
你应该问自己的问题:速度差异是否会给你带来任何问题?如果没有,请不要担心。
-
不知道.. 但是如果静态方法很容易调用并且我经常使用它。我假设静态方法会比常规方法慢,但我的结果显示静态方法更快。只是想确认一下(比如说知识)
-
完成同上。首先让它工作。从您的简单测试中可以清楚地看出,这可能不是一个显着的数量级差异,因此如果它变得流行,请关注功能并担心毫秒级优化。然而,当你达到那个水平时,你可能已经对整个事情进行了几次重构......
-
是的,静态更快。不,您不想使用静态。尝试在 UnitTest 中模拟一个静态类。那你就知道为什么了。
-
@Amil 错了,
Foo::test()和foo_test()没有区别。所有的静态变量都是有效的全局变量。是的,Foo::test 只是全局命名空间中的 Foo,但无论是在函数前加上 foo_ 还是将其放入类中,都没有太大区别。
标签: php performance object methods static