ホームページ  >  記事  >  バックエンド開発  >  PHP 例外処理、エラースローおよびコールバック関数、およびその他のオブジェクト指向エラー処理メソッド_PHP チュートリアル

PHP 例外処理、エラースローおよびコールバック関数、およびその他のオブジェクト指向エラー処理メソッド_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:14:40814ブラウズ

例外処理は、指定されたエラー (例外) 条件が発生したときにスクリプトの通常のフローを変更するために使用されます。この状況を例外といいます。
PHP 5 には、他の言語と同様の例外処理モジュールが追加されています。 PHP コードで生成された例外は、throw ステートメントでスローし、catch ステートメントでキャッチできます。例外処理が必要なコードは、発生する可能性のある例外をキャッチするために try コード ブロックに配置する必要があります。すべてのトライには少なくとも 1 つの対応するキャッチが必要です。複数のキャッチを使用して、さまざまなクラスによって生成された例外をキャッチします。 try ブロックが例外をスローしなくなった場合、またはスローされた例外に一致する catch が見つからなかった場合、PHP コードは最後の catch にジャンプした後、実行を継続します。もちろん、PHP では、catch ブロック内で例外を再度スローすることができます。

例外がスローされると、後続のコードは実行を続行せず、PHP は最初に一致する catch を見つけようとします。例外がキャッチされず、set_Exception_handler() を使用して適切に処理されなかった場合、PHP は重大なエラーを生成し、Uncaught Exception... (キャッチされなかった例外) メッセージを出力します。

例外がトリガーされると、通常は何が起こりますか:
•現在のコードの状態が保存されます
•コードの実行が事前定義された例外ハンドラー関数に切り替わります
•状況に応じて、ハンドラーは保存されたコードから再起動される場合がありますstate コードの実行を開始するか、スクリプトの実行を終了するか、コード内の別の場所からスクリプトの実行を継続します

1. エラーと例外レベルの定数テーブル
error: コンパイル中に見つからない実行時エラー より良いです。 echo を使用して未探索の割り当てられた変数を出力しようとすると、この種の問題によりプログラムまたはロジックが続行できなくなり、中断する必要が生じることがよくあります。
例外: プログラムの実行中に予期せぬ状況が発生することはよくありますが、ロジックは実行可能です。これは、所定の形式で長さが間違っているユーザー名を受信するなどのアプリケーションのシナリオを満たしていないため、例外は主にコーダーに依存して、例外をスローする前に事前判断を行い、例外をスローする前にプログラム フローを変更します。プログラムを中断することなく、これらの状況に対処できます。
PHP の例外とエラーの定義は、特に古いバージョンの PHP ではあまり明確ではないようです。
エラーとログの値 定数 説明 備考
1 E_ERROR (整数)
致命的な実行時エラー。このタイプのエラーは、メモリ割り当てによって引き起こされる問題など、通常は回復不可能な状況です。その結果、スクリプトは終了し、実行が続行されなくなります。
2 E_WARNING (整数)
実行時警告 (致命的ではないエラー)。プロンプト メッセージのみが表示されますが、スクリプトは終了しません。
4 E_PARSE (整数)
コンパイル時の構文解析エラー。解析エラーはパーサーによってのみ生成されます。
8 E_NOTICE (整数)
実行時通知。スクリプトでエラーとして表示される可能性のある状況が発生したことを示しますが、正常に実行できるスクリプトにも同様の通知が表示される可能性があります。
16 E_CORE_ERROR(integer)
PHP の初期化および起動中に致命的なエラーが発生しました。このエラーは E_ERROR に似ていますが、PHP エンジン コアによって生成されます。 PHP 4 以降
32 E_CORE_WARNING(integer)
PHP の初期化起動中に発生した警告 (致命的ではないエラー)。 E_WARNING に似ていますが、PHP エンジン コアによって生成されます。 PHP 4 以降
64 E_COMPILE_ERROR(integer)
致命的なコンパイル時エラー。 E_ERROR に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4 以降
128 E_COMPILE_WARNING(integer)
コンパイル時間の警告 (致命的ではないエラー)。 E_WARNING に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4 以降
256 E_USER_ERROR(integer)
ユーザー生成のエラー メッセージ。 E_ERROR に似ていますが、ユーザーがコード内で PHP 関数trigger_error()を使用して生成されます。 PHP 4 以降
512 E_USER_WARNING(integer)
ユーザーによって生成された警告メッセージ。 E_WARNING に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4 以降
1024 E_USER_NOTICE(integer)
ユーザーによって生成された通知情報。 E_NOTICE に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4 以降
2048 E_STRICT (整数)
コードの最高の相互運用性と上位互換性を確保するために、PHP のコード変更の提案を有効にします。 PHP 5 以降
4096 E_RECOVERABLE_ERROR(integer)
捕捉できる致命的なエラー。 これは、潜在的に危険なエラーが発生したが、PHP エンジンが不安定になる原因ではなかったことを示します。 エラーがユーザー定義のハンドラー (set_error_handler() を参照) によって捕捉されない場合、E_ERROR となり、スクリプトは終了します。 PHP 5.2.0 以降
8192 E_DEPRECATED(integer)
実行時通知。有効にすると、将来のバージョンで正しく動作しなくなる可能性があるコードについて警告が表示されます。 PHP 5.3.0 以降
16384 E_USER_DEPRECATED(integer)
ユーザーが生成した警告メッセージ。 E_DEPRECATED と似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 5.3.0 以降
30719 E_ALL (整数)
E_STRICT すべてのエラーおよび警告メッセージ。PHP 5.3.x では 30719、PHP 5.2.x では 6143、以前は 2047

2. error_reporting() および try-catch、throws
error_reporting() 関数は、(パラメーターが渡されない場合) スクリプトで取得および設定できるもの例外を処理する (すべての例外を処理する必要があるわけではありません。たとえば、E_CORE_WARNING、E_NOTICE、E_DEPRECATED は無視できます)。この設定は、php.ini の error_reporting オプションで定義された例外処理設定をオーバーライドします。
例:
error_reporting(E_ALL&~E_NOTICE); // E_NOTICE を除いて、他の例外がトリガーされます (E_ALL&~E_NOTICE の二項演算結果は、E_NOTICE の対応するビットの値が 0 に設定されます) try-catch __autoload() 内でクラス Valid の関数を自動的にロードすることはできません。
try-catch は、trigger_error() によって引き起こされるエラーなどの例外やエラーをキャッチするために使用することはできません。 例外とエラーは異なります。

コードをコピー コードは次のとおりです:

try{
// エラーを引き起こす可能性のあるコードです
}catch(Exception $err){ // このエラー オブジェクトは、タイプ Exception を宣言する必要がありますシステムのデフォルトの例外処理クラス
echo $err->getMessage();
}

//thrown は次のような例外をスローします。
thrown new Exception('an error');
例:
try {
if ( empty ( $var1 ) ) throw new NotEmptyException();
if ( empty( $var2 ) ) throw new NotEmptyException();
if ( ! preg_match() ) throw new InvalidInputException(); >write();
$template->render( 'success' );
} catch ( NotEmptyException $e ) {
$template->render( 'error_empty' );
} catch ( InvalidInputException $e ) {
$template-> render( 'error_preg' );
}
[/code]
例外クラス構造: ほとんどのメソッドはオーバーライドが禁止されています (最終)

コードをコピーします コードは次のとおりです:
Exception {
/ * 属性 */
protected int $code ;
protected int $line ;
public __construct ([ string $message ; = "" [, int $code = 0 [, Exception $previous = null]]] )
final public string getMessage ( void ) //例外によってスローされたメッセージ
final public Exception getPrevious ( void ) // 前の例外
final public int getCode ( void ) //例外コード、これはユーザー定義です
final public string getFile (void) //例外が発生したファイルパス
final public int getLine (void) //例外が発生した行発生
final public array getTrace (void) // 例外追跡情報(array)
final public string getTraceAsString (void) // 例外追跡情報(string)
public string __toString (void) // サブ関数呼び出し時の戻り値例外オブジェクトを文字列として直接使用しようとしています
final private void __clone (void) //例外オブジェクトのクローン作成時に呼び出されます
}



拡張例外クラス
try-catch には、最初から開始して複数の catch 句を含めることができますcatch 節 (節内の例外の場合) 変数の型が throw ステートメントによってスローされた例外の型と一致する場合、その節は他の catch 節を実行せずに実行されます。そうでない場合は、Exception がベースであるため、次の catch 節の試行が続けられます。すべての例外クラスのクラスに一致する例外をスローする場合、例外の種類に応じて異なる処理方法を使用する場合は、例外の種類の catch 句を最後に置く必要があります。
Exception はすべての例外の基本クラスです。実際のニーズに応じて例外クラスを拡張できます。

コードは次のとおりです。
calss MyException extends Exception{ public errType = 'default '; public function __construct($ errType=''){ $this->errType = $errType;
}
thrown new MyException ();エラーが発生する可能性があります
}catch (MyException $err){ // このエラー オブジェクトは型を宣言する必要があります
echo $err->errType();
}catch(ErrorException $err){ //ErrorException は例外クラスですPHP 5 で追加、Exception
echo 'error !'; から継承catch 句をアンロードしたコードがキャッチした例外を適切に処理できない場合は、catch 句内で例外をスローし続けることができます。


3. 例外例外コールバック関数




コードをコピーします

コードは次のとおりです:

set_Exception_handler(callback functionName) // この関数は、Exception またはそのサブクラス例外が発生したときに呼び出されます。
functionExceptionHandlerFun($errObj){ // Exception 例外のコールバック関数には、スローされた例外オブジェクトであるパラメーターが 1 つだけあります。
//.....
}

Exception 例外のコールバック関数は、set_error_handler のコールバック関数のように true を返して例外を除去することはできません。コードの実行は続行されないため、後続のコードの実行を継続したい場合は、try-catch を使用する必要があります。
ただし、例外があります。スクリプト終了コールバック関数は実行でき、スローされた例外が処理されない場合でもコールバック関数は実行できます。
register_shutdown_function(callback functionName[,argument1,argument2,...]);
例:
コードをコピー コードは次のとおりです:

function shutdownfunction(){
echo 'script is end' ;
}

register_shutdown_function("shutdownfunction");
shutdownfunction() はスクリプトの最後で実行されるため、関数がエラーがスローされた後に定義されている場合でも、このコールバック関数は関数を呼び出すことができます。 (関数定義はスクリプトのコンパイル中に完了します)。

4.trigger_error(string errorMsg[,int user_error_type])
この関数は、エラーをアクティブにトリガーするために使用されます: user_error_type は、E_ALL、E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、またはそれらの組み合わせの値のみにすることができます。
set_error_handler(callbeck functionName[,user_error_type]); //システムによってスローされたエラーや、trigger_error() 関数を使用してユーザーによってトリガーされたエラーなどのエラーを処理するために、trigger_error() のコールバック関数を設定します。
オプションのパラメータ user_error_type:
このパラメータが設定されている場合、trigger_error によってスローされたエラーの種類が user_error_type の定義範囲と一致する場合にのみ、コールバック関数をトリガーできます。
この値の設定は、error_reporting() 関数と似ています。
最初のパラメータ (callbeck functionName):
関数名。関数には 5 つのパラメータを含めることができ、そのうち最初の 2 つは順番に必須です:
trigger_error throws user_error_type、trigger_error throws errorMsg、throws error ファイルの絶対パス、エラーがスローされた行番号、およびエラーがスローされたときのコンテキスト (trigger_error() のスコープ内のすべての変数、関数、クラス、およびその他のデータを含む配列)
コールバック関数の戻り値: If If falseが返された場合、システム エラー処理メカニズムはエラーをスローし続けるか、戻り値が返されない場合、エラーは解消されます。
trigger_error() エラーは、try-catch 例外キャッチ ステートメントではキャッチされません。

www.bkjia.com本当http://www.bkjia.com/PHPjc/326237.html技術記事例外処理は、指定されたエラー (例外) 条件が発生したときにスクリプトの通常のフローを変更するために使用されます。この状況を例外と呼びます。 PHP 5 では、他の言語と同様の例外処理モジュールが追加されています。で...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。