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
你不能把多,但由于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)
你的意思是
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网络应用程序)捕获,然后通过"服务器关闭,请稍后再试"消息回复客户端.