2009-04-21 7 views
3

私はこれを、PHP4のバックグラウンドから来た、PHPでエラーをトリガーしたいときに使っていました。これらのエラーを処理するための私自身のset_error_handler()がありました。PHPのtrigger_error()はPHP5で何かより優れたものとして廃止されましたか?

私はどこで、しかしいつか誰かが私に「例外を使うべき」と言ったことを覚えていません。古いコードをたくさん組み込んでいるので、私はエラー処理の実装についていくつか良いアドバイスを得る時が来たと思いました。

私はPHP5を使用しています(以前のコードを書いたときよりもはるかに賢いです)、私のtrigger_error()は古いことですが、もしそうなら、エラーを処理する最良の方法は何ですかPHP5で?

答えて

4

はい、PHP 5の例外モデルを調べることができます。しかし、何か新しいものがあなたがそれを採用しなければならないという意味ではないことを忘れないでください。ドメイン内で必要とし、意味をなさない機能のみを採用してください。

言われているように、私は例外は把握するのが良い考えであり、あなたがそれらを採用しないことを決定したとしても、あなたはその経験のためにより良いでしょう。

私はあなたがPHP: Exceptions - Manualを読むことをお勧めしたいと思います:

PHP 5は、他のプログラミング言語 と 似た例外モデルを持っています。 PHP内で例外がスローされ、 が捕まえられ(キャッチされて)いる可能性があります。 コードは のtryブロックで囲み、 潜在的な例外のキャッチを容易にすることができます。それぞれの試行は に少なくとも1つの対応するキャッチがある必要があります。 ブロック exeptionsの異なるクラスをキャッチするために、複数のキャッチブロックを使用することができます( )。ノーマル(無 例外がtry ブロック内でスローされない場合、または スローされた例外のクラスを一致キャッチが 存在しない)、実行順序で定義されている最後の catchブロックの後に続けます。 catchブロック内で例外をスローする(または を再スローする)ことができます。私もWhat Is an Exception?を読むことをお勧めします

(これは、Javaのチュートリアルですが、概念は普遍的であることに注意してください)

エラーがメソッド内で発生した場合、メソッドはオブジェクトを作成し、それを手渡しますランタイムシステムに転送します。例外オブジェクトと呼ばれるオブジェクトには、エラーの種類と、エラーが発生したときのプログラムの状態など、エラーに関する情報が含まれています。例外オブジェクトを作成し、それをランタイムシステムに渡すことは、例外をスローすることと呼ばれます。

編集:グローバル例外ハンドラを実装するためには、あなたが私たちにset_exception_handler機能をお勧めします(基本的には以前に未処理の例外を処理するデフォルトの例外ハンドラを確立するために)。

+0

はset_error_handler(のようなすべての例外をキャッチする一般的な方法はあります)すべてのエラーを処理します。ここでは

は小さな例ですか?それとも、私はまだ古いPHP4の考え方ですか?あなたの答えをありがとう、BTW。 – alex

+1

はい、慣れているものに似たようなことができます(私の編集をご覧ください)。しかし、あなたが思っているよりはるかに柔軟性があるので、例外についてもう少し詳しくお読みになりたいと思うかもしれません。理解できる例外を処理してから回復することができ、既定の例外ハンドラを使用して未処理の例外を記録してから、アプリケーションを終了する方がよい場合があります。 –

+0

偉大な答えと編集:)私はこれらを見てみましょう... – alex

2

例外を使用するのは、独自のアプリケーションエラーをトリガーして処理するオブジェクト指向の方法です。

exceptionsのPHPマニュアルトピックは、おそらく開始するのに適しています。

function doSomething() { 
    if ($error) { 
     throw new Exception('Some descriptive error message.'); 
    } 
} 

try { 
    doSomething(); 
} 
catch (Exception $e) { 
    die('<p class="error">' . $e->getMessage() . '</p>'); 
} 
+0

getMessage()は、任意の例外の引数を取得するメソッドですか? – alex

+2

はい、例外のメッセージが表示されます:http://php.net/manual/en/exception.getmessage.php –

関連する問題