在没有需要的情况下在函数内部进行函数调用是否较慢?

时间:2013-06-28 19:57:52

标签: php function

这一直困扰着我,让我说我有一个功能:

public function addItem($item) {
   $this->items[] = $item;
   return $this;
}

然后我有另一个功能,如:

public function addItems($items) {
    foreach($items as $item) {
        $this->addItem($item); //IS THIS FASTER OR
        $this->items[] = $item;//THIS?
    }

    return $this;
}

基本上我总是在循环中做选项1 $this->addItem($item),但另一方面,在我看来多余的我可以将项目附加到数组,基本上它做同样的事情。如果性能有任何差异,只想知道哪一个更快。

4 个答案:

答案 0 :(得分:4)

$this->items[] = $item;

总是(微小)快于

$this->addItem($item);

因为第二个版本会产生调用函数的开销,而第一个版本则不会。对于一个元素,您应该使用第一个版本而不是array_push()的原因相同。引用手册:

  

注意:如果使用array_push()将一个元素添加到数组中   最好使用$ array [] =因为这样就没有开销了   调用函数。

答案 1 :(得分:3)

函数调用需要一些处理器时间。因此,较少的函数调用 - >更多表现。

<强>无论其

重点是您的代码仍然清晰且安全。这样的代码比任何表现都重要得多。

记住一次又一次:

  

清除代码,清除变量和函数名称   您的代码将为您节省大量的时间和健康。

您的案例:addItem()函数提供了一个非常良好的抽象。保持它。

在函数addItem()中,您可以进行一些验证和调试。此外,它可以返回truefalse表示成功。

答案 2 :(得分:2)

功能跳转原则上比直接访问慢(即1更快)。 话虽如此:

  1. 不要担心微观优化。更喜欢清晰,干净,简洁和/或灵活的代码以快速编码。
  2. 如果您使用某些PHP操作码优化器,那么这些访问很可能是内联的。在那种情况下,没有区别。

答案 3 :(得分:0)

我对基准测试最重要的是

在您自己证明之前,永远不要相信任何人告诉您更快或更慢的事情

我已经写过几十个基准,多次证明公众舆论错误。