debian_Lenovo-B50-30
@debian_Lenovo-B50-30

Нужно ли проверять наличие метода, если в конструкторе не будет доступа к методам?

Варик 1
$controller = 'app\\controllers\\' . self::$route['controller'] . 'Controller';
if (!class_exists($controller)) {
    throw new Error("Контроллер {$controller} не найден", 404);
}
$action = self::$route['action'] . 'Action';
if (!method_exists($controller, $action)) {
    throw new Error("Метод {$controller}::{$action} не найден", 404);
}
$cObj = new $controller(self::$route);
$cObj->$action();
/* как примерный мальчик сделал все проверки, потом создал экземпляр и вызвал метод - классика :) */

Варик 2
$controller = 'app\\controllers\\' . self::$route['controller'] . 'Controller';
if (!class_exists($controller)) {
    throw new Error("Контроллер {$controller} не найден", 404);
}
$cObj = new $controller(self::$route);
/* в конструкторе, например, может быть УСЛОВИЕ на редирект или ещё что-то, что не даст запустить метод
* тогда нужно ли проверять наличие метода, до создания экземпляра?
*/
$action = self::$route['action'] . 'Action';
if (!method_exists($сObj, $action)) { // ищем в уже созданном экземпляре, если его конструктор допустил нас к его методам
    throw new Error("Метод {$controller}::{$action} не найден", 404);
}
$cObj->$action();

Логичен ли второй вариант, если учесть комментарии?
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
@FanatPHP
Чебуратор тега PHP
По мне - что в лоб, что по лбу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
RecruitIT Москва
от 100 000 до 160 000 ₽
от 130 000 до 180 000 ₽
Сбер Москва
До 240 000 ₽
26 окт. 2020, в 01:56
3500 руб./за проект
25 окт. 2020, в 23:21
5000 руб./за проект
25 окт. 2020, в 21:47
1500 руб./за проект