Цикломатическая разница в сложности между switch / case и in_array

сценарий

Мне нужно проверить, если мой $type_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

Решение

Да. Но правило PHPMD для CC внутри одного метода / функции. Он не применяет CC по всему callgraph. В общем, вы можете решить любое предупреждение PHPMD CC, извлекая ветку в его собственный метод.

На заметку: рассмотрим заменить условное полиморфизмом.

3

Другие решения

Других решений пока нет …