开关/案例和in_array之间的循环复杂性差异

时间:2017-10-19 07:56:14

标签: php cyclomatic-complexity phpmd

方案

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

1 个答案:

答案 0 :(得分:3)

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

旁注:考虑replace the conditional with polymorphism