静态呼叫与动态呼叫:哪一个具有更好的性能?

时间:2011-09-02 02:04:38

标签: php oop class

例如,这是我的班级:

<?php 
 Class Example
 {
  public function example_function()
  {
   echo "example code";
  }
 }
?>

以下哪一项最佳,性能明智?

1)

Example::example_function();

2)

$example = new Example();
$example->example_function();

他们之间有什么区别?

4 个答案:

答案 0 :(得分:7)

这不是性能问题。它真的不是。差异,如果有的话,是微不足道的,几乎无法衡量。

如果您需要使用静态方法设计类,请使用静态方法 如果你需要实例化你的类,你别无选择,只能使用对象方法。

这是与设计无关的课程设计决策。

答案 1 :(得分:3)

如果您计划访问类元素,则需要通过类的实例访问该函数。例如,当通过静态方法调用(Example::example())访问时,这是不合法的:

class Example
{
    private $str = 'example';

    public function example()
    {
        echo $this->str;
    }
}

所以,问题不是关于性能,而是关于你将如何使用你的课程和/或功能

您应该真正阅读PHP OOP个文档。

答案 2 :(得分:3)

就执行速度而言,两者之间的差异可能微不足道。但他们做了两件完全不同的事情。

Example::example_function();

将类视为全局单例对象。只有一个Example对象,它可能有一些公共方法可以在包含类的任何地方调用。

$example = new Example();
$example->example_function();

正在创建Example类的一个实例,这意味着可以有许多示例运行不同的属性。

如何使用这两者完全取决于项目的性质以及您想要实现的目标。

答案 3 :(得分:0)

正如其他一些评论所暗示的那样,关于绩效的问题似乎是次要的。还有其他决策和策略可以改善您的表现,但这似乎更像是纯粹的设计。

我认为这是一个好设计与糟糕设计策略的问题?我解释自己。

如果你不需要OO,那么你为什么要使用OO?我的意思是创建对象然后访问它们似乎很愚蠢,好像它是标准的程序功能

我只是在调查这个问题,所以请随意与我的意见进行辩论,我很高兴得到关于此的反馈(正面或负面): - )。