我很难理解我应该如何设计我的代码的错误处理部分.我最近刚刚问了一个类似的问题,我应该如何进行大约
returning server error codes to the user,eg. 404 errors.我知道我应该从应用程序的当前部分处理错误;看起来很简单
但是,当我无法处理链中当前链接的错误时该怎么办?例如,我可能有一个用于管理身份验证的类.其中一个方法可以是createUser($username,$password).编辑:此方法将返回一个用户标识或用户对象.在该功能中,我需要确定用户名是否已经存在.如果这是真的,我应该如何提醒调用代码呢?返回null而不是用户对象是一种方法.但是我怎么知道造成这个错误呢?
我应该如何处理错误,调用代码可以很容易地找出导致错误的原因?是否有这种情况常用的设计模式?
编辑:我忘了提到:我正在使用PHP.
解决:虽然许多人认为在这种情况下不应该使用例外,但我得出结论,这是最好的解决办法.
首先,没有简单,优雅的例外方法. (我发现,如果没有系统内置的语言是不可能的…异常已经内置了.)
其次,针对“例外情况只能用于异常情况,这不是一个”的论点:“When I call getFoo(),I actually expect to get a Foo. If I don’t get it,it’s by definition an exceptional event.”(via,pkainulainen)
有几种常见的模式:
投掷一个exception.
2.返回NULL或FALSE,并将引用设置为错误.例如.
function createUser($user,$password,&$error) { //... // You could use any type of object here. This is just a simple example. if(uniqueKeyFailure) { $error = new UserAlreadyExists(); return NULL; } //.. }
它可以称为:
$userCreateError = NULL; $res = createUser($user,$pass,$userCreateError); if($res === NULL) { // do something with $userCreateError }
3.返回NULL或FALSE,并提供最后一个错误(例如curl_error).
我建议1或2.主要原因人们避免例外的“不寻常的”错误,如用户输入是性能.有这么多的讨论,比如Performance of try-catch in php.
我不推荐3,因为它不是可重入的.