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);
}
你看到那些$ mensagem字符串了吗?它们也是错误消息,我的问题是,不是让$ mensagem显示一些错误消息,我们可以使用几个throw异常吗?
更新: 我并不是要一次性抛出异常。他当时的每个例外。
提前致谢, MEM
答案 0 :(得分:5)
你的意思是
else {
throw new XException(...);
throw new YException(...);
throw new ZException(...);
}
......并且所有这些都被“立刻”抛出?
不,那不可能,也不会有太多意义。如何捕获这些异常的客户端代码?
此外,您不应该使用异常作为正常流控制结构的替代,异常应该只处理异常错误,例如无法连接到数据库等。
您可以实现另一个自定义异常类,它将一个错误数组作为参数,客户端代码可以执行以下操作:
catch(SomeException $e) {
$messages = $e->getErrorMessages();
}
由于我不会说你的语言,我真的不能告诉你在你发布的代码中想要做什么,否则我可以提出一些更具体的建议。
EDIT / UPDATE:
@MEM感谢您使用英语错误消息更新代码。您是否实施了域名注册服务?
当然,这是一个有点困难的话题,因为每个人都有自己的偏好,但如果e,我不会抛出异常。 G。用户尝试注册已被其他人使用的域。这不是一个特殊的状态,这是例外。我会创建一个验证类/方法来收集这些错误消息,然后这些错误消息会显示给用户。
我什么时候会在像您这样的应用中抛出异常?我不太了解域名注册,但如果您从远程服务器/ webservice获取域名是否空闲且该Web服务已关闭,那么我会抛出异常。它被控制器(我想象一个MVC网络应用程序)捕获,然后通过“服务器关闭,请稍后再试”消息回复客户端。
答案 1 :(得分:5)
你不能抛出多个,但是从PHP 5.3开始,你可以向异常的构造函数提供previous来创建一个链接的异常列表。
例如,这里有一个3项链:
$a = new Exception('Exception a');
$b = new Exception('Exception b', 0, $a);
throw new Exception('Exception c', 0, $b);
然后,在您的异常处理程序中,您可以使用getPrevious
遍历链do {
printf("%s:%d %s (%d) [%s]\n", $e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), get_class($e));
} while($e = $e->getPrevious());
答案 2 :(得分:1)
你可以抛出并捕获不同的异常。
如果您只想打印错误,您也可以抛出相同类型的异常。但我会假设您需要针对每个案例采用不同的方法
function myFunction() {
if($a) {
throw new AException('A Error');
} else if($b) {
throw new BException('B Error');
} else if($c) {
throw new CExceptıon('C Error');
}
}
try {
myFunctıon();
} catch (AException $aException) {
echo $aException->getMessage();
} catch (BException $bException) {
echo "this is a terrible case, don't do that again pls";
$mydbobject->rollback();
} catch (CException $cException) {
mailDevTeam("the server made a boo boo");
}
答案 3 :(得分:0)
当然,只需为每条消息创建基本异常的子类。