Pie*_*one 6 php state status return-value
这个问题:从Java中的方法返回状态标志和消息的最佳方法与我的相似,但我会用PHP而不是Java(这可能会略有不同).
问题:
有一种方法可以有一个成功的结果(这可能会变成更成功的结果)或一个"有问题"的结果.后者意味着操作失败,但知道原因也很重要.想象一下Authentication类的方法:
public function login($name, $password)
{
    if (successful_authentication)
    {
        report success
    }
    else
    {
        report failure, explain why (e.g. wrong name/pass, user banned)
    }
}
Run Code Online (Sandbox Code Playgroud)
为成功和失败回报真假都是微不足道的,但如何报告失败的原因呢?
可能的解决方案:
成功时返回true,失败时返回一个字符串,错误代码表示问题:使用PHP可以通过这种方式获得漂亮的干净块,如下所示:
$loginStatus = $auth->login('name', 'pass');
if ($loginStatus === true)
{
    doSomething();
}
else
{
    if ($loginStatus == 'wrong_login_data')
    ...
    elseif ($loginStatus == 'banned')
    ...
    // or with an array full of error messages:
    echo $erroMessages[$loginStatus];
}
Run Code Online (Sandbox Code Playgroud)返回一般状态(状态)对象:非常优雅的解决方案以及面向未来的(如果状态数量不同或以后应该返回其他数据,则没有问题),也许是最好的一个:
$loginStatus = $auth->login('name', 'pass')
if ($loginStatus->isSuccess)
...
else
    echo $errorMessages[$loginStatus->errorCode]; // $errorMessages as by the previous example
Run Code Online (Sandbox Code Playgroud)以上两种情况中的任何一种,但不是普通字符串而是类常量:
$loginStatus = $auth->login('name', 'pass')
if ($loginStatus->isSuccess)
...
elseif ($loginStatus->errorCode == Auth::ERR_USER_BANNED)
...
Run Code Online (Sandbox Code Playgroud)
有了这个,就没有必要在文档中解释错误代码,也会觉得更"自然"(至少对我而言).
问题:
你会用什么(上述的或其他任何解决方案)?从长远来看,已经证明是一种好方法?
先感谢您!
从我记事起,PEAR 就一直这样做。所以这是一个经过验证的方法。
class LoginError {
    private $reason;
    public function __construct($reason)
    {
        $this->reason = $reason;
    }
    public function getReason()
    {
        return $this->reason;
    }
}
function isError($response)
{
    return ($response instanceof LoginError);
}
public function login($name, $password)
{
    if (successful_authentication)
    {
        return true;
    }
    else
    {
        return new LoginError('The password is incorrect');
    }
}
$loginStatus = login('name', 'pass');
if (!isError($loginStatus))
{
    doSomething();
}
else
{
    echo $loginStatus->getReason();
}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           347 次  |  
        
|   最近记录:  |