我有一个面向对象的应用程序(用 MVC 框架编写),而且我的错误处理过程通常是临时的。有时我返回 0 表示没有错误,有时返回 atrue
表示成功。一般来说,没有太多的一致性。
我的场景是我有一个控制器从我的模型中调用一个方法。如果该方法失败,我希望它返回一个人类可读的原因,说明错误无法完成的原因。此错误将传递给用户。例如 userDelete() 方法。我只想知道用户是否被删除,如果没有,为什么?
我以前的方法是如果删除则返回true
,否则返回字符串。这使得if
声明有点棘手,因为
if ($output = $this->someMethod())
将为字符串返回 true,所以这没有多大帮助。
我对替代方案的考虑是:
返回一个数组
array ('status'=>'error', 'message' => 'You did not specify an existing user')
这将与上面显示的 if 语句兼容(即,当返回数组时将返回“false”)。我会返回true
一个成功的函数调用。
使用 PHP 的 Exception 类和 try/catch 块
当代码出错时(即检查用户是否存在,结果是否定的)
if ($query->count == 0) {
throw new Exception("User does not exist");
}
然后在调用页面上我会写:
try {
$this->someMethod();
} catch (Exception $e) {
echo $e->getMessage() //Or some other way of handling the error
}
如果我继续使用这种替代方法,那么 PHP 中的“错误形式”是什么?异常是否应该只用于实际的编码错误(即除以 0)而不是用于“更高级别”的应用程序错误处理/用户反馈?
请记住:我计划在执行期间的某个时间点将这些错误消息发送回用户……我是否应该担心 PHP 本身抛出的其他异常会返回给用户?我应该扩展 Exception 类来防止这种情况吗?