PHP例外に関する質問

WBOY
リリース: 2016-09-08 08:43:57
オリジナル
1353 人が閲覧しました

通常、後続の処理のために PHP 例外情報を収集するには、例外ハンドラーを設定するか、基本クラスを継承して例外サブクラスを作成します。ここで使用するのは、登録済みの例外ハンドラーです。よく理解できない問題がいくつか発生しました

1: 例外がスローされた後、プログラムは終了しますが、特定の状況下では例外がスローされた後、プログラムは終了しないということをどこかで見たことがありますが、この特定の状況を忘れてしまいました。教えてください。

2: 例外ハンドラーを登録した後、コードセグメントが例外をスローしようとした場合、登録された関数は実行されません。なぜそうなるのかよく覚えていません。もう少し知識を教えてください。

3: 例外の設計に関して、一部のログの収集を容易にするために、例外ログを収集する方法は、例外ハンドラーを登録してからこの関数を使用して整理して収集する方法が一般的ですが、試してみたところ、この関数が見つかりました。実行されないので、ログを収集するこの設計をどのように行うかわかりません。 普及した科学を教えてください。

返信内容:

通常、後続の処理のために PHP 例外情報を収集するには、例外ハンドラーを設定するか、基本クラスを継承して例外サブクラスを作成します。ここで使用するのは、登録済みの例外ハンドラーです。よく理解できない問題がいくつか発生しました

1: 例外がスローされた後、プログラムは終了しますが、特定の状況下では例外がスローされた後、プログラムは終了しないということをどこかで見たことを漠然と覚えていますが、この特定の状況については忘れてしまいました。

2: 例外ハンドラーを登録した後、コードセグメントが例外をスローしようとした場合、登録された関数は実行されません。なぜそうなるのかよく覚えていません。もう少し知識を教えてください。

3: 例外の設計に関して、一部のログの収集を容易にするために、例外ログを収集する方法は、例外ハンドラーを登録してからこの機能を使用して整理して収集する方法が一般的ですが、試してみたところ、これは次のとおりです。関数が実行されないため、ログを収集するこの設計をどのようにすればよいのかわかりません。 普及した科学を教えてください。

Thinkphp の E メソッドは例外であり、主に直接エラーをスローして終了するために使用されます。
try の使い方はすでに知っています。例外をキャッチした場合は、例外の後に何をする必要があるかを書き留めるだけです。

リーリー

1. これまでにわかっていることは、try catch で例外がキャッチされた場合、プログラムは終了しないということです。
デフォルトの例外ハンドラーを設定する必要があります。トライ/キャッチブロックなしでキャッチするのは異常です
。 例外は、Exception_handler が呼び出された後に中止されます。 3. catch は例外をキャプチャするため、当然、例外ハンドラーは対応するコードセグメントで例外を収集できません。 関数_例外_ハンドラー($例外)
リーリー
上記はCIフレームワークに付属するカスタム例外関数なので、ログはgetMessageとエラーが発生したコードファイルと行番号を収集するだけです。たとえば、CI はコードが発生したときにコントローラーとアクションをキャプチャすることもできます

例外は、エラーと比較して、より完全なスタック処理メソッドを備えたエラー処理メカニズムです。

これは、例外を処理した後、プログラムが元の位置に戻らずに実行を継続することも決定します (これはエラーの場合は問題ありません)。


実行を続行できないのはなぜですか?これは、例外とエラーの異なる処理メカニズムが原因です。

エラー処理は、エラーが発生した場所で中断し、エラー処理関数にジャンプし、処理後に中断に戻ります。完了したため、実行を続行できます。

例外処理とは、スタックをプッシュアップして、例外をキャッチできるプログラムセグメントを見つけて例外を処理することです。スタックがクリアされているため、元の実行位置に戻ることはできません。

例外ハンドラー関数は、関数型プログラミングと互換性を持たせるために PHP によって作成された関数です。しかし、これは実際には標準の例外処理方法に準拠していません。例外処理は、try {} catch {} を使用して実装するのが最適です。

内側のキャッチを突破して外側のキャッチにキャッチされる例外が欲しい場合は、内側のキャッチで throw $e を使用できます。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート