处理异常 - 致命错误:未捕获的异常'EppCommandsExceptions',消息'命令语法错误'

时间:2010-07-29 15:19:43

标签: php exception try-catch

  

致命错误:未捕获的异常   带有消息的'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

1 个答案:

答案 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以避免致命错误。