我正在开发一个简单的 MVC 框架,我正在使用类的自动加载,我想用它class_eixists()
来检查从 URI 解析的控制器名称是否确实存在并适当地响应。我从
$controller = "\\namespace\\controller";
if(class_exists($controller))
$this->controllerObject = new $controller();
else
// react appropriately
如果类不存在,这最终会引发未捕获的逻辑异常。如果我的 google-fu 没有让我失望,那么这是使用自动加载和该class_exists()
功能时的正常事件。我认为没什么大不了的,并将其包装在 try catch 中,但我仍然收到未捕获的异常,我看不出我做错了什么。
try {
if (class_exists($controller)) {
$this->controllerObject = new $controller(array_slice($parsedURI, 1));
echo "controller is $controller<br />";
}
} catch (LogicException $e) {
$e->getMessage();
} catch (Exception $e) {
$e->getMessage();
}
错误输出如下。第 57 行是带有 ( if (class_exists($controller))
) 的行。我手动更改了实际路径,因为系统管理员对公开的任何内部信息都抱有偏执。
Fatal error: Uncaught exception 'LogicException' with message 'Class
Controller\Gibberish could not be loaded' in some/path/private/webroot/assets/route.php:57 Stack trace: #0 [internal function]:
spl_autoload('Controller\Gibb...') #1
some/path/private/app/webroot/assets/route.php(57): class_exists('\Controller\Gib...')
#2 some/path/private/app/webroot/index.php(32): Assets\Route-
>__construct('/add/webroot/...') #3 {main} thrown in
some/path/private/app/webroot/assets/route.php on line 57