2009-06-05 4 views
5

私はこれを探して、私はちょうどこのコードでは、同じ記事に実行するように見える:

try 
    { 
     //some code 

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

はどこ$ eが格納されますんやウェブマスターはそれを参照してくださいどのように?私は特別な機能を探すべきでしょうか?

答えて

7

catch {}ブロック内からスローされたException object(この場合、$ e)は、次の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 />"); 
} 

上記の出力は

である私だ外側の例外ハンドラ(これは、内部例外ハンドラからスローされます。)

+0

おかげでマークを行い、そして私のnewbinessの言い訳が、どのように行います私はgetMessageをチェックして、何のエラーが出てくるのか見ていますか? – jcslzr

+4

$ e-> getMessage()は、エラーメッセージとともに文字列を返す単なる関数です。 Example#1 here(http://www.php.net/manual/en/language.exceptions.extending.php)には、標準のExceptionオブジェクトで使用できるメソッドについての良い情報があります。 –

+1

ありがとう、私はそれを確認します CS – jcslzr

1

$eは、のインスタンスです。例外またはException。これらのオブジェクトには、いくつかの特定の属性とメソッドがあります(Exceptionクラスから継承)。詳細については、chapter about exceptionsおよびException member listを参照してください。

1

私はあなたのコードに例外をスローしているこのコードでサードパーティのコード/ライブラリのいくつかの並べ替えを使用していると仮定しています。あなたは単にそれをキャッチするためにスローされる例外の準備ができていなければなりません。詳細については

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

Exceptions上のPHPマニュアルのエントリを読んでください。

1

ライン:

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

ドン\トン意味をなさない。

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

をしかし、あなたの場合には例外がすでに起こる外側のtryブロックに直接スローされます。あなたは例外をキャッチすると次のような例外を除いて何かをすると仮定しています。まったく同じ動作を作成します

//some code 

:あなたがするようにコードを変更した場合

+0

はい!私は、例外が捕捉されて再投げられるコードを見るのは嫌です。例外処理には注意が払われていないため、クリーンなコードではなく大きなシステムでランダムなエラー処理が行われ、問題の診断が容易です。 – grantwparks

5

良い点の1つは、Exceptionが__toString()を実装し、呼び出しスタックトレースを出力することです。だから、時々私は私がキャッチ(で、になったか見たいと思って、私はつもりだ知っている低レベルの例外で

)私は単に

error_log($e); 
+0

これをありがとう、ドキュメントはerror_log()にExceptionオブジェクトを渡すことを示していません。私はこの機能を長く捜していると思った。それをキャッチし、処理して、デフォルトのハンドラでログに記録します。試してみるまでは難しくありませんでした。 – ddowns

+0

大歓迎です。私は基本的にExceptionの '__toString()'実装のスタックトレースの側面を見つけて、それを使って私が使っていたレガシー関数を置き換えました。 – grantwparks