4

设想

我需要检查我的$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()函数后面吗?

4

1 回答 1

3

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

附带说明:考虑用 polymorphism 替换条件

于 2017-10-19T08:08:42.477 回答