2016-05-11 7 views
4

私はいくつかのAPIエンドポイントを構築し、例外ログを作成しようとするので、データベースを削除してPDOExceptionを取得するためにエンドポイントを実行します。PHPキャッチされていない例外よりキャッチされた例外より多くの詳細が得られます

私の質問ですが、私は例外をキャッチしなかった場合、私は郵便配達を通じてエンドポイントを実行したとき、それは私を示してより詳細なメッセージ、スタックトレースなど(約1000行)、

が、私の場合try catchブロックでこの例外をキャッチしました。

これほど細かいことはありません。何故ですか?私たちが例外をキャッチしなかったときに得たのと同じ正確なデータを印刷するには、とにかくそこにいますか?

+1

'$ exception'オブジェクトはただ実際の[オブジェクトのメソッドやプロパティ](HTTPを見て、魔法の__toString()メソッドによってレンダリングされるよりも多くの情報を保持しています。 net/manual/en/class.exception.php)[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

は必ずcatchブロックで例外をスローし、PHPハンドルを聞かせすることができます。これにより、例外が発生して何かをしてから、デフォルトの動作を続行できます。 //www.php:

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

    throw $exception; 
} 
関連する問題