Варик 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();
Логичен ли второй вариант, если учесть комментарии?