2016-05-11 3 views
4

Я создаю некоторую конечную точку api и пытаюсь работать с исключением журнала, поэтому я намеренно удаляю базу данных и запускаю конечную точку, чтобы получить PDOException.PHP Необлученное исключение дает больше деталей, чем пойманное исключение

Мой вопрос, если я не поймал исключение, когда я бежал конечную точку через почтальона, он показывает мне гораздо более подробное сообщение, трассировки стека, и т.д. (около 1000 строк),

, но если я поймал исключение с помощью try catch block примерно так

catch (\Exception $exception) { 
    print_r($exception->__toString()); 
    print_r("\n\n"); 

    die; 
} 

Это гораздо меньше деталей. Почему это? и есть ли в любом случае печатать те же точные данные, которые мы получили, когда мы не поймали исключение?

+1

Параметр '$ exception' объект содержит гораздо больше информации, чем визуализируется магическим __toString() метод, просто посмотрите на фактические [свойства и методы объекта] (HTTP: //www.php. net/manual/en/class.exception.php) like [getTrace()] (http://www.php.net/manual/en/exception.gettrace.php) –

+0

Посмотрите на 'debug_backtrace()'. Что касается причины, вероятно, что Xdebug, вероятно, включен, что является расширением PHP, которое будет пробивать результаты этой функции, чтобы дать вам трассировку стека. –

+0

И не нужно явно вызывать '__toString()'; вся точка магического метода заключается в том, что он называется неявно (магически), если вы пытаетесь эхо-объект –

ответ

4

У вас есть все эти данные. объект Exception имеет много методов:

try { 
    // something throwing exception 
} catch (\Exception $e) { 
    echo $e->getCode() . "\n"; 
    echo $e->getFile() . "\n"; 
    echo $e->getLine() . "\n"; 
    echo $e->getMessage() . "\n"; 
    echo $e->getTraceAsString() . "\n"; 
} 

Подробнее о Exception классе:
http://php.net/manual/en/class.exception.php

+0

Это все еще не дает столько деталей, как если бы исключение не было обнаружено. – Harts

+3

Что вам не хватает? – luchaninov

+0

см. Обновление того, что я имел в виду, что он усечен – Harts

1

Вы всегда можете бросить исключение в блоке поймать, и пусть PHP ручку. Это позволит вам сделать что-то с исключением, а затем продолжить поведение по умолчанию.

catch (\Exception $exception) { 
    // Do something with the exception 

    throw $exception; 
} 
Смежные вопросы