2

我有一个面向对象的应用程序(用 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 类来防止这种情况吗?

4

1 回答 1

0

就我个人而言,我使用类似于您的数组想法的东西,因为如果需要,我可以返回并存储该状态和所有其他有用的日志信息。如果一切顺利,我只需返回一个空数组以保持一致性,因为 if(someFunct()) 将在成功时为真(如果我使用 true 作为成功)或在非空数组上。这样,我只是将空数组 (!someFunc()) 等同于成功。

但是,请随意查看这篇文章,我发现它对这个主题非常好。

于 2012-05-17T18:31:07.857 回答