单例类实例方法与PHP中静态类方法的性能?

时间:2010-08-05 19:48:08

标签: php singleton performance class-design static-methods

我对客观分析感兴趣;调用单例类的实例方法或静态类的方法。我已经看过this所以我不是在寻找关于两者之间差异的讨论,或者讨论哪个是“更好”。我只对两者之间的相对表现感兴趣。提前谢谢。

-Mike

5 个答案:

答案 0 :(得分:16)

除非您在紧密循环中调用它们(意味着没有其他重要代码,呼叫的开销很大)数千或数十万次,否则不要担心。差异很可能不到一微秒,所以不值得烦恼。只需做出最好的建筑选择......

Premature optimization is the root of all evil...

编辑:对于所有的挫折者,我写的a blog post描述了为什么这样的性能比较几乎没用。

答案 1 :(得分:16)

检查此图表:)

alt text

抓住this article

答案 2 :(得分:3)

在调用单例模式对象的实例方法之前,需要首先获取实例,这需要静态方法调用:

SomeClass::getInstance()->myMethod();
// versus
SomeClass::myMethod();

因此,当您第一次需要访问函数中的该对象时,需要先进行静态方法调用。因为函数调用永远不会自由,所以最好让方法保持静态。

答案 3 :(得分:1)

在我之前的测试中,我发现调用静态方法比调用实例方法更快,而且内存效率更高......但是单纯的不应该仅仅因为这些原因而被解雇。 / p>

答案 4 :(得分:1)

我对这次谈话有点迟了,但刚刚发现了一个问题,我想我会把自己的想法投入到我的第一篇帖子中去了。

作为一个快速实验(在阅读了zolex链接的文章之后),我在文章的基准测试中添加了第三个测试用例:

$inst = TestSingleton::getInstance();  
for($i=0;$i<$runs;$i++) $inst->test();

结果当然不是100%一致,但我发现大多数时候通过所有三种方法运行500,000次调用时,上述方法的运行速度比其他两种方法快2-3秒。

虽然当我看到“过早优化”的引用时,我总是畏缩,但在这种情况下,我认为它击中了头部。性能差异最小,并且通常有利于更合理的单例使用。