оператор switch — вызов метода Geenrate из строки переполнение стека

У меня проблема Cyclomatic Complexity с оператором switch case, поэтому мне нужно реорганизовать блок кода switch / case.

Я пытаюсь создать массив с ключами и в качестве значения задать вызов метода
т.е. $ this-> authChecker-> isGranted (User :: ROLE_ADMIN)

$attributeResolver = [
self::OPEN_FORM => '$this->authChecker->isGranted(User::ROLE_USER)',
self::CREATE => '$this->authChecker->isGranted(User::ROLE_ADMIN)',
self::EDIT => '...',
self::DISABLE => '...',
];

И для вызова использовать что-то вроде этого,

return $attributeResolver[$attribute];

Я хочу сохранить вызов метода в строке, чтобы избежать ненужных вызовов службы.

Это возможно?

1

Решение

Вы думали о решении, и вы спрашиваете об этом решении. Это называется проблемой XY, которая затрудняет поиск ответа об основной проблеме. С текущими требованиями (которые могут быть не точными), вы можете пересмотреть $attributeResolver в качестве таких:

$attributeResolver = [
self::OPEN_FORM => User::ROLE_USER,
self::CREATE => User::ROLE_ADMIN,
.
.
.
];

и по возвращении сделать звонок в isGranted метод как следующее:

return $this->authChecker->isGranted($attributeResolver[$attribute]);
3

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

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