gpt4 book ai didi

php - 方法返回状态 : bool, string, const... (PHP)

转载 作者:可可西里 更新时间:2023-11-01 13:23:31 24 4
gpt4 key购买 nike

本题:Best way to return status flag and message from a method in 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)
}
}

成功和失败返回true和false很简单,但是如何报告失败的原因呢?

可能的解决方案:

  • 返回 true 或 false 并编写另一个方法 (getStatus()) 来获取特定问题:这对我来说有点尴尬
  • 使用异常(exception):因为用户被禁止并不是异常(exception)(如果用户在输入时死亡,正如本网站的另一位作者所指出的那样),那么在这些情况下使用异常(exception)是完全错误的(但是,如果查询失败,该方法可能会抛出数据库异常)
  • 成功时返回 true,失败时返回字符串,并带有指示问题的错误代码:使用 PHP 可以通过这种方式获得漂亮的干净 block ,如下所示:

    $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];
    }
  • 返回一个通用的状态(state)对象:非常优雅的解决方案,也是面向 future 的(如果状态数量不同或稍后应该返回额外的数据没问题),也许是最好的:

    $loginStatus = $auth->login('name', 'pass')
    if ($loginStatus->isSuccess)
    ...
    else
    echo $errorMessages[$loginStatus->errorCode]; // $errorMessages as by the previous example
  • 以上两者之一,但不是纯字符串而是类常量:

    $loginStatus = $auth->login('name', 'pass')
    if ($loginStatus->isSuccess)
    ...
    elseif ($loginStatus->errorCode == Auth::ERR_USER_BANNED)
    ...

    有了这个,就没有必要在文档中解释错误代码,并且感觉也更“自然”(至少对我而言)。

问题:

您会使用什么(上述解决方案或任何其他解决方案)?从长远来看,什么被证明是好的方法?

提前致谢!

最佳答案

从我记事起,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();
}

关于php - 方法返回状态 : bool, string, const... (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com