我使用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。
答案 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