【发布时间】:2015-09-25 00:26:51
【问题描述】:
我有为练习 OOP 和 MVC 技能而构建的中小型 PHP 应用程序。我有 init/bootstrap 文件调用 Router 调用 Controller -> Service Layer -> Repository (数据库),然后将变量发送回 View Layer(所有依赖项都由 DiC/IOC 处理)。
我创建了 abstract class BaseException,它扩展了 Core Exception 类。然后我有不同的异常类——DatabaseException、FileException 等。
触发异常的示例:在数据库层中,我尝试从数据库中获取数据,如果失败则抛出新的 DatabaseException。
示例 2: 在我处理文件的类中包含、保存、删除 - 如果发生错误,它会抛出新的 FileException。
try catch 代码放在哪里,在 init/bootstrap 文件中还是在 BaseController 中?但是如果 Controller 失败并抛出某种 ControllerException 怎么办。
在我看来,它可能看起来像这样(init.php 文件):
try {
// create new router
$router = $container->get('Router');
$router->import'Config/routes.php');
// run the router
$router->route();
// load controller
$dispatcher = $container->get('Dispatcher');
$dispatcher->load();
} catch (DatabaseException $e) {
echo "Database error!";
$log->log('Database error', $e->getMessage());
} catch (FileException $e) {
echo "File error!";
$log->log('File error', $e->getMessage());
} catch (Exception $e) { // default
echo "Some exceptional error!";
$log->log('Default exception', $e->getMessage());
}
还有一个问题,如何记录这些异常(错误),例如上面的示例,或者我应该在 BaseException 中注入 Log 类并在那里处理日志记录?
【问题讨论】:
标签: php exception logging exception-handling