сценарий
Мне нужно проверить, если мой $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()
функционировать?
Да. Но правило PHPMD для CC внутри одного метода / функции. Он не применяет CC по всему callgraph. В общем, вы можете решить любое предупреждение PHPMD CC, извлекая ветку в его собственный метод.
На заметку: рассмотрим заменить условное полиморфизмом.
Других решений пока нет …