静态方法比非静态方法快吗?

问题描述 投票:12回答:6

编辑::哦,我忘了

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 

如今,我正在尝试使我的方法尽可能地静态。但这是真的,.. atleast for php

php performance object methods static
6个回答
35
投票

当不需要周围的对象时,应始终使用静态,而在需要对象时应使用动态。在您提供的示例中,不需要对象,因为该方法不会与类中的任何属性或字段进行交互。

这应该是静态的,因为它不需要对象:

class Person {
    public static function GetPersonByID($id) {
        //run SQL query here
        $res = new Person();
        $res->name = $sql["name"];
        //fill in the object
        return $res;
    }
}

这应该是动态的,因为它使用了它所在的对象:

class Person {
    public $Name;
    public $Age;
    public function HaveBirthday() {
        $Age++;
    }
}

速度差异最小,但是您必须创建一个对象来运行动态方法,并且该对象保存在内存中,因此动态方法占用更多的内存和更多的时间。


19
投票

简短回答,因为我不想大声疾呼:

是否更快。如果您需要某种性能至关重要的东西,那么考虑将每个函数调用的时间减少0.02纳秒,而不是无论如何都不会在PHP中做到这一点。

静态方法产生了无法测试,无法维护的“全局性一切”代码,这将给您带来更多的伤害。

[如果您不想使用适当的OOP(如果您知道这样做的原因和原因,那完全可以),请这样做。只是不要这样做,因为您想节省CPU时间。

http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/

http://sebastian-bergmann.de/archives/885-Stubbing-Hard-Coded-Dependencies.html

http://en.wikipedia.org/wiki/Class-based_programming

如果仅单击一个链接: http://www.scribd.com/doc/20893084/Advanced-OOP-and-Design-Patterns#scribd

Premature optimization is the root of all evil.构建代码易于维护,如果运行缓慢,请进行一个配置文件,它很可能会告诉您文件系统或数据库存在问题,您整理出的所有内容将包含一些非常具体的部分的PHP进行优化。如果您的代码整洁,可更改,则可以加快速度。


4
投票
唐纳德·克努斯(Donald Knuth)<40年前说过“ [过早的优化是万恶之源”。您知道,当您拥有英特尔发明的新型4004

microprocessor时。那个鼓被击败得像任何一匹马一样厉害,我看不出它与原始问题有何关系。实际上,我可能很幸运,但是我还没有看到这种野外行为猖evidence的证据。 las,互联网上的某个人必须正确,然后我们才能整夜共事。 有关主题的更多信息,我认为公认的答案是最务实的,对该问题的第一个评论是要提出的正确答案。静态代码与实例化代码是否更快,主要取决于该语言的实现方式,我看不到这些响应中的任何一个都能充分回答有关PHP的问题。有人知道PHP并想参与其中吗?


2
投票

0
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.