Pet*_*rne 10 php architecture oop design-patterns
我很难理解我应该如何设计代码的错误处理部分.我最近问了一个类似的问题,关于我应该如何向用户返回服务器错误代码,例如.404错误.我了解到我应该从应用程序的当前部分处理错误; 看起来很简单.
但是,当我无法处理链中当前链接的错误时,我该怎么办?例如,我可能有一个用于管理身份验证的类.其中一种方法可能是createUser($username, $password)
.编辑:此方法将返回用户标识或用户对象.在该函数中,我需要确定用户名是否已存在.如果这是真的,我该如何提醒调用代码呢?返回null而不是用户对象是一种方法.但是,我怎么知道导致错误的原因呢?
我应该如何处理错误,以便调用代码可以很容易地找出导致错误的原因?是否存在通常用于此类情况的设计模式?
编辑:我忘了提到:我正在使用PHP.
解决:虽然很多人认为在这种情况下不应该使用例外,但我得出结论,这是最好的解决方案.
首先,除了例外之外,没有简单,优雅的替代方案.(我认为如果没有内置于语言中的系统就不可能......已经内置了异常.)
其次,响应"异常应该只用于特殊情况,这不是一个"的论点:"当我调用getFoo()时,我实际上期望得到一个Foo.如果我没有得到它,它是由定义一个例外事件." (via,pkainulainen)
有一些常见的模式:
1.抛出异常。
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;
}
//..
}
Run Code Online (Sandbox Code Playgroud)
它可以这样称呼:
$userCreateError = NULL;
$res = createUser($user, $pass, $userCreateError);
if($res === NULL)
{
// do something with $userCreateError
}
Run Code Online (Sandbox Code Playgroud)
3.返回NULL或FALSE并提供获取最后一个错误(例如curl_error)。
我会推荐 1 或 2。人们避免出现“非异常”错误(例如用户输入)异常的主要原因是性能。关于这一点有相当多的讨论,例如Performance of try-catch in php。
我不推荐 3,因为它不可重入。
归档时间: |
|
查看次数: |
1766 次 |
最近记录: |