【问题标题】:underlying difference between elseif vs else ifelseif 与 else if 之间的潜在区别
【发布时间】:2011-06-07 09:14:59
【问题描述】:

我想知道elseifelse if 之间的区别。

我在阅读the manual,它说如果使用大括号{},它们的处理方式相同,但只有elseif 在不使用大括号时有效。

另外一位贡献者说:

注意 } elseif() { 比 } else if() { 快一些

他通过基准测试来支持它。

在我看来,elseif 才是真正的表达方式:

else if() {...}

实际上相当于:

else { if() {...} }

这或许可以解释为什么它稍微慢了一点。

我习惯于使用else if,因为这也是我在其他语言中的做法。我真的不认为你以哪种方式输入它并不重要(除非你不使用大括号..但我认为无论如何使用大括号总是好的)我只是对底层细节感到好奇。

我说的对吗?

【问题讨论】:

标签: php


【解决方案1】:

除了我的评论,从我在 PHP 源代码中可以看到,唯一的速度提升是 PHP 的解析器有一个特殊的标记 elseif,不出所料地称为 T_ELSEIF。但我确信速度提升只不过是在替代语法中允许 elseif 的副作用:

if (cond1):
    // Do something
elseif (cond2):
    // Do something else
else:
    // Do something else
endif;

类似于 Python,它使用 elifelse if 和空格是不允许的,除非不必要地使解析器的实现代码复杂化(即在看到冒号和 if 关键字之间采取不同的行为)。所以elseif后面分别需要一个冒号,这就是语言规则的规定。

我很确定 PHP 只是将 else if 视为单个语句 else 中的条件块。

如果有任何速度差异根本,请归咎于解析器。

【讨论】:

  • 而且,如果我没记错的话,PHP 根本不应该关心空格。
  • @Charlie Pigarelli:空格不是问题,事实上 Python 和 PHP 的替代语法在看到 if 而不是 else 之后的冒号时会窒息。
【解决方案2】:

Manual我读出了(见注):

注意:请注意,elseif 和 else if 只会被视为完全 与上例中使用大括号时相同。当使用一个 冒号来定义你的 if/elseif 条件,你不能分开 else if 变成两个单词,否则 PHP 会因为解析错误而失败。

例子:

<?php

/* Incorrect Method: */
if($a > $b):
    echo $a." is greater than ".$b;
else if($a == $b): // Will not compile.
    echo "The above line causes a parse error.";
endif;


/* Correct Method: */
if($a > $b):
    echo $a." is greater than ".$b;
elseif($a == $b): // Note the combination of the words.
    echo $a." equals ".$b;
else:
    echo $a." is neither greater than or equal to ".$b;
endif;

?>

【讨论】:

    【解决方案3】:

    该评论中的“速度差异”在统计上并不显着。除了else if:不解析,没有任何实际区别。

    【讨论】:

      【解决方案4】:

      关于效率,基于我长期研究的内容。没有区别。

      【讨论】:

      • 不妨分享你的结果来确认。
      • 错了!确认你的“长期学习”,但不要撒谎。
      猜你喜欢
      • 2013-01-14
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多