Обработка исключений - фатальная ошибка: необработанное исключение «EppCommandsExceptions» с сообщением «Ошибка синтаксиса команды» - PullRequest
0 голосов
/ 29 июля 2010

Неустранимая ошибка: необработанное исключение 'EppCommandsExceptions' с сообщением 'Отсутствует обязательный параметр'

Строка, о которой идет речь:

throw new EppCommandsExceptions($result->msg, $codigo); 

Почему у меня возникает эта ошибкав этой строке?

Вкл EppCommandsExceptions.class.php У меня есть этот класс, который расширяет Исключение:

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);

Позже у меня для контактной части - method1

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();
}

Это потому, что я использую одно и то же исключение для обоих методов?Должен ли я иметь один класс исключения для каждого метода?: s

Пожалуйста, совет, спасибо большое.MEM

1 Ответ

1 голос
/ 29 июля 2010

Исключение, которое вы выбрасываете, будет поймано, только если оно находится внутри блока 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, чтобы избежать фатальной ошибки.

...