为什么三元运算符比if / else更复杂?

时间:2014-06-13 04:54:49

标签: php pdepend

我使用pdepend测试我的库,并且某些功能具有极高的复杂性。我刚刚意识到它来自三元运算符,但我不确定为什么。

使用以下功能:

  function test($a) {
        return $a > 10 ? 5:20;
  }

pdepend返回5的复杂度(npath)。为什么有5条不同的路径?我只看到2。

使用以下功能:

   function test($a) {
      if($a > 10)
         return 5;
      else
         return 20;
   }

npath复杂度为2.这是有道理的。


编辑:好的,我看了另一个问题:PMD - NPath complexity very high with ternary operator (?

它是算法的一部分..但是,该函数只有2条可能的路径。该算法对我没有意义。节点数不反映路径数,并且任意将值加2。

2 个答案:

答案 0 :(得分:3)

pdepend用于确定复杂性的算法为三元运算符的使用增加了两个,即使它们应该是相同的,因为它与if else的工作方式相同,并添加相同数量的路径。根据我的经验,如果在实际应用中有任何实际差异,你不应该看到太多。

答案 1 :(得分:2)

三元运算符生成非对象值的副本。意思是,在您的第一个代码示例中,复制了$a,然后返回结果。 Source。在第二个代码示例中,没有进行此类复制。

我的假设是,所涉及的额外路径来自制作副本。

要查看的其他资源:

http://fabien.potencier.org/article/48/the-php-ternary-operator-fast-or-not

https://drupal.org/node/1838368

http://www.mail-archive.com/internals@lists.php.net/msg51926.html