У меня есть структура MVC в моем php.
Я использую автозагрузку для инициализации правильного контроллера.
Вот очень упрощенная версия моего index.php:
<?php
spl_autoload_extensions('.class.php');
spl_autoload_register();
$controller = strtolower($_GET["controller"]);
$action = strtolower($_GET["action"]);
$obj = new $controller();
$obj->{$action}();
Допустим, пользователь загружает www.example.com/Page/View
. Apache перепишет его на www.example.com?controller=Page&action=View
. Затем, когда php вызывает $obj = new $controller();
, он попытается найти page.class.php
в том же каталоге, что и файл (очевидно, в моем приложении файловая структура не так тривиальна, с пространствами имен и т. д.), а затем загрузит класс Page
внутри и выполнить Page->View();
.
Теперь предположим, что пользователь делает опечатку и пытается загрузить www.example.com/Pagr/View
. В идеале он должен получить ответ заголовка 404. Но с текущей реализацией php просто выдаст Fatal error
, если не удастся автоматически загрузить pagr.class.php
.
Как я могу предотвратить появление этой ошибки? Я провел некоторое исследование и не могу найти способ проверить, может ли класс быть загружен автоматически или нет до вызова new
.