Обработка исключений в PHP: куда девается $ e? - PullRequest
5 голосов
/ 05 июня 2009

Я искал это, и я, кажется, наткнулся на те же статьи, в этом коде:

   try
    {
        //some code

    }
    catch(Exception $e){
        throw $e;
    }

Где хранится $ e или как его видит вебмастер? Стоит ли искать специальную функцию?

Ответы [ 5 ]

7 голосов
/ 05 июня 2009

Объект Exception (в данном случае $ e), выброшенный из блока catch {}, будет перехвачен следующим самым высоким блоком try {} catch {}.

Вот глупый пример:

try {
    try {
        throw new Exception("This is thrown from the inner exception handler.");
    }catch(Exception $e) {
        throw $e;
    }
}catch(Exception $e) {
    die("I'm the outer exception handler (" . $e->getMessage() . ")<br />");
}

Выход выше

Я - внешний обработчик исключений (Этот метод выдается из внутреннего обработчика исключений.)

5 голосов
/ 05 июня 2009

Приятно то, что Exception реализует __toString () и выводит трассировку стека вызовов.

Так что иногда в Низкоуровневых Исключениях, которые я знаю, я хочу увидеть, как я попал, в catch () я просто делаю

error_log($e);
1 голос
/ 05 июня 2009

Строки:

catch(Exception $e){
  throw $e;
}

Не имеет смысла. Когда вы ловите исключение, вы должны что-то делать с таким исключением, как:

catch(Exception $e){
  error_log($e->getMessage());
  die('An error has occurred');
}

Но в вашем случае исключение выдается непосредственно внешнему блоку try, который уже произойдет.
Если вы измените свой код на:

//some code

Создает точно такое же поведение.

1 голос
/ 05 июня 2009

Я предполагаю, что вы используете какой-то сторонний код / ​​библиотеку с этим кодом, который создает исключение в вашем коде. Вам просто нужно быть готовым к исключению, которое будет выдано, чтобы поймать его, и затем вы можете регистрировать его / отображать его так, как хотите.

try {
  $Library->procedure();
catch(Exception $e) {
  echo $e->getMessage(); //would echo the exception message.
}

Для получения дополнительной информации прочитайте статью руководства PHP по Исключения .

1 голос
/ 05 июня 2009

$e является экземпляром Exception или любого другого класса, который расширился от Exception . Эти объекты имеют некоторые определенные общие атрибуты и методы (унаследованные от класса Exception ), которые вы можете использовать. См. главу об исключениях и Исключение список участников для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...