@JTester

Как сократить данный код?

Здравствуйте! Подскажите пожалуйста, как сократить данный код, тип чтобы там методы не повторялись каждый раз и т.д
if ($user->isModerator()) {
    $user->updateStatus(self::SUPPORT);

    $a = $this->get($user, 'status', []);

    echo 'Вы модератор';
}
elseif ($user->isSupport()) {
    $user->updateStatus(self::MODERATOR);

    $a = $this->get($user, 'id', []);

    echo 'Вы поддержка';
}
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 3
anton_reut
@anton_reut
Начинающий веб-разработчик
Вынести их в отдельную функцию.
Ответ написан
vechnokrainii
@vechnokrainii
ну почти всегда(
Вынести в отдельный метод можно типа checkRole() и узнать какая роль у юзера, а не спрашивать каждый раз юзер админ? юзер саппорт? и т.д А так код вополне понятен) Если только у Вас не 100500 ролей)
Ответ написан
edward_freedom
@edward_freedom
Можно сделать вместо вызова функции при заполнении массива, указывать функцию и в цикле проверять до возвращения true, чтобы не вызывать все функции сразу
$options = [
    [
        "condition" => isModerator(),
        "execute" => function () {
            echo 'isModerator';
        }
    ],
    [
        "condition" => isSupport(),
        "execute" => function () {
            echo 'isSupport';
        }
    ],
];


array_walk(array_filter($options, function ($item) {
    return $item["condition"];
}), function ($item) {
    $item["execute"]();
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы