newbie: выбрасывать новое исключение - мы можем изменить имя исключения? - PullRequest
3 голосов
/ 29 июля 2010

Я пытаюсь работать с исключениями.

Итак, у меня есть что-то вроде:

Если происходит что-то плохое:

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

Позже я попробую и, если не в порядке, поймаю:

try 
{
  createContact();
}
catch(CreateContactException $e) 
{
  $error .= 'An error occurred with the code:'.$e->getCode().' and message:'.$e->getMessage();
}

1) Будет ли это работать? Я имею в виду, что эти getCode () и getMessage () не связаны с аргументами CreateContactException, они?

2) Должен ли я где-то иметь класс CreateContactException, который расширяет Exception? Я имею в виду, можем ли мы иметь собственные имена для наших исключений без необходимости создания расширенного класса?

Большое спасибо заранее, MEM

1 Ответ

12 голосов
/ 29 июля 2010

Исключения должны быть просто подклассами встроенного класса Exception, поэтому вы можете создать новый, как этот:

class CreateContactException extends Exception {}

Попытка выбросить другие классы в качестве исключений приведет к ошибке.

Преимущество использования разных имен состоит в том, что вы можете иметь несколько блоков catch, поэтому вы можете перехватывать различные типы исключений и позволять другим проскальзывать:

try {
    // do something
}
catch (CreateContactException $e) {
    // handle this
}
catch (DomainException $e) {
    // handle this
}
...