致命错误:未捕获的异常 带有消息的'EppCommandsExceptions' '缺少所需参数'
有问题的一行:
throw new EppCommandsExceptions($result->msg, $codigo);
为什么我在这条线上出现此错误?
在 EppCommandsExceptions.class.php 上 我有这个类扩展了Exception:
class EppCommandsExceptions extends Exception
{
//could be empty.
}
接下来,在 CommandsController.php 上我有:
include_once('EppCommandsExceptions.class.php');
以及之后,如果在 method1 上发生了不好的事情:
throw new EppCommandsExceptions($result->msg, $codigo);
稍后,在同一个控制器上,另一个 method2 将在method1之后运行, 我有: 如果事情也变坏了:
throw new EppCommandsExceptions($result->msg, $codigo);
后来我有了联系方式 - 方法1
try
{
$createdContact = $comandos->createContact($contactoVo);
}
catch(EppCommandsExceptions $e)
{
$error .= 'Error Contact. Cód:'.$e->getCode().' Mensagem:'.$e->getMessage();
}
之后,对于域名部分: method2
try
{
$createdDomain = $comandos->createDomain($domainVo);
}
catch(EppCommandsExceptions $e)
{
$error .= 'Error Domain. Cód:'.$e->getCode().' Mensagem:'.$e->getMessage();
}
是因为我对两种方法使用相同的异常吗? 我应该为EACH方法使用一个Exception类吗? :■
请指教, 非常感谢。 MEM
答案 0 :(得分:1)
只有在try
区块内时才会捕获您抛出的异常。
如果它不是它将传播到调用堆栈,直到它被一个早期的调用函数捕获。
你得到了这个致命错误,因为你抛出的异常永远不会被捕获,所以它由默认的未处理异常处理程序处理,它会发出致命错误。
示例:
try
{
$createdContact = $comandos->createContact($contactoVo);
if (error_condition())
throw new EppCommandsExceptions $e;
}
catch(EppCommandsExceptions $e)
{
$error .= 'Error Contact. Cód:'.$e->getCode().' Mensagem:'.$e->getMessage();
}
直接在try块中抛出异常通常不是很有用,因为你也可以直接从错误条件中恢复而不是抛出异常。但是,如果createContact
可能抛出异常,则此构造变得更有用。在这种情况下,您可以在某个时刻捕获EppCommandsExceptions
以避免致命错误。