15

我正在使用 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 complex very high with ternary operator (?

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

4

2 回答 2

3

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

于 2014-06-13T05:13:56.347 回答
2

三元运算符复制非对象值。意思是,在您的第一个代码示例中,$a复制然后返回结果。来源。在第二个代码示例中,没有制作这样的副本。

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

其他要查看的资源:

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

于 2014-06-13T05:16:49.767 回答