php例外 - 我们可以多次投掷吗?

MEM*_*MEM 3 php exception

    if ($disponivel === 0)
    {
        $razao = $check->cd->reason;
        $mensagem = "the domain isn't available. Reason: ".$razao;
    }
    elseif($disponivel === 1)
    {
        $mensagem = "the domain doesn't exist - free to register.";
    }

    return $mensagem;
}
else
{
    throw new EppCommandsExceptions('Domain isn't supported - '.$result->msg, $codigo);
}
Run Code Online (Sandbox Code Playgroud)

你看到那些$ mensagem字符串了吗?它们也是错误消息,我的问题是,我们可以使用几个throw异常而不是让$ mensagem显示一些错误消息吗?

更新:我不是要一次性抛出异常.他当时的每个例外.

在此先感谢,MEM

aar*_*man 6

你不能把多,但由于PHP 5.3,你可以提供以前到异常的构造函数来创建例外的链接列表.

例如,这是一个3项链:

$a = new Exception('Exception a');
$b = new Exception('Exception b', 0, $a);
throw new Exception('Exception c', 0, $b);
Run Code Online (Sandbox Code Playgroud)

然后,在异常处理程序中,您可以使用getPrevious遍历链

do {
    printf("%s:%d %s (%d) [%s]\n", $e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), get_class($e));
} while($e = $e->getPrevious());
Run Code Online (Sandbox Code Playgroud)


Max*_*Max 5

你的意思是

else {
    throw new XException(...);
    throw new YException(...);
    throw new ZException(...);
}
Run Code Online (Sandbox Code Playgroud)

......而且所有这些都被"立刻"抛出?

不,那是不可能的,也不会有太大的意义.如何捕获这些异常的客户端代码?

此外,您不应该使用异常作为正常流控制结构的替代,异常应该只处理异常错误,例如无法连接到数据库等.

您可以实现另一个自定义异常类,它将一组错误作为参数,客户端代码可以执行以下操作:

catch(SomeException $e) {
    $messages = $e->getErrorMessages();
}
Run Code Online (Sandbox Code Playgroud)

因为我不会说你的语言,所以我不能在你发布的代码中告诉你要做什么,否则我可以提出更具体的建议.


编辑/ UPDATE:

@MEM感谢您使用英语错误消息更新您的代码.您是否实施了域名注册服务?

当然,这是一个有点困难的主题,因为每个人都有自己的偏好,但是如果用户试图注册已经被其他人使用的域,我就不会抛出异常.这不是一个特殊的状态,这是例外.我会创建一个验证类/方法来收集这些错误消息,然后这些错误消息会显示给用户.

我何时会在像您这样的应用中抛出异常?我不太了解域名注册,但如果您从远程服务器/ webservice获取域名是否空闲且该Web服务已关闭,那么我会抛出异常.它被控制器(我想象一个MVC网络应用程序)捕获,然后通过"服务器关闭,请稍后再试"消息回复客户端.