用户友好消息的方法错误处理

时间:2012-05-17 18:17:31

标签: php exception-handling

我有一个面向对象的应用程序(用MVC框架编写),而且我的错误处理程序通常都是临时的。有时我会返回0表示没有错误,有时候会true表示成功。一般来说,没有很多一致性。

我的情况是我有一个控制器从我的模型中调用一个方法。如果该方法失败,我希望它返回一个人类可读的原因,说明为什么错误无法完成。此错误将传递给用户。例如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类以防止这种情况吗?

1 个答案:

答案 0 :(得分:0)

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

但是,请随时查看this post,我发现这个主题相当不错。