2017-10-19 106 views
4

方案圈复杂度差异in_array

我需要检查,如果我$type_id变量是一组特定的ID之一。

对于除可读性以外,没有理由,我

switch($type_id) { 
    case Type::SOME_TYPE: 
    case Type::SOME_OTHER_TYPE: 
    ... 
     //do stuff 

去了哪里大部分向下继承到一个常见的情况。

但是这增加了圈复杂度,使PHPMD开始抱怨。

所以我想,我们只是用in_array()来代替。

if (in_array($type_id, [ 
    Type::SOME_TYPE, 
    TYPE::SOME_OTHER_TYPE, 
    ... 
    ])) { 
    //do stuff 
} 

问题

此时PHPMD停止抱怨,但不是圈复杂度依然存在,只是被隐藏了背后的in_array()功能?

回答

3

是的。但PHPMD规则适用于单个方法/函数中的CC。它不会在整个调用图中应用CC。一般来说,您可以通过将分支抽取到自己的方法来解决任何PHPMD CC警告。

附注:考虑到replace the conditional with polymorphism

+0

这是否意味着由于不可读性,CC仅被视为“混乱”? – Alec

+0

@Alec不,这并不意味着难以阅读。它更多的是关于能够掌握或推理某种方法/功能。如果通过一段代码有很多可能的分支,对于这个输入x来说就更难说了,输出将是y。这反过来又直接影响了你需要覆盖这个功能的单元测试次数。维基百科的文章相当全面:https://en.wikipedia.org/wiki/Cyclomatic_complexity – Gordon