この記事では、PHP で一般的に使用される簡単な例外処理クラスを紹介します。詳しく説明する必要がある学生は参照してください。
コードは次のとおりです | コードをコピー |
{ を試してください $a=10/0; }catch (例外 $e){ echo "例外をスローします"; } ?> |
上記のコードは「スローされた例外」を出力しませんが、次のエラー メッセージを出力します: 警告: Division by zero in...
注: try ブロックは例外をスローしませんが、システムのデフォルトのエラー処理メカニズムに従って例外を処理します
したがって、例外をキャッチできるかどうかは、実際に例外がスローされるかどうかによって決まります
コードは次のとおりです | コードをコピー |
クラス例外 関数 __construct($message = null, $code = 0); 最終関数 getMessage() // 例外メッセージを返す /* オーバーロード可能なメソッド */ |
簡単な使用法は次のとおりです: (例外を通じてエラーメッセージをスローします)
コードは次のとおりです | コードをコピー |
試してください{ |
使いやすくするためにこのクラスを拡張できます
コードは次のとおりです | コードをコピー |
クラス MyException は Exception を拡張します // すべての変数が正しく割り当てられていることを確認します // 文字列出力のスタイルをカスタマイズします パブリック関数customFunction() { |
例外処理の基本的な考え方は、コードが try コード内で呼び出されて実行されるということです。 try コード ブロックでエラーが発生した場合は、例外処理を実行できます。 Java などの一部のプログラミング言語は、特定の状況下で自動的に例外をスローします。 PHP では、例外を手動でスローする必要があります。次のメソッドを使用して例外をスローできます:
コードは次のとおりです | コードをコピー |
新しい例外をスロー('message',code); |
Throw キーワードは例外処理メカニズムをトリガーします。これは関数ではなく言語構造ですが、値を渡す必要があります。受信オブジェクトが必要です。最も単純なケースでは、組み込みの Exception クラスをインスタンス化できます。
最後に、try コードの後に、少なくとも 1 つの catch コード ブロックを指定する必要があります。複数の catch コード ブロックを try コード ブロックに関連付けることができます。各 catch ブロックが異なる種類の例外をキャッチできる場合は、複数の catch ブロックを使用するのが合理的です。たとえば、Exception クラスの例外をキャッチしたい場合、コードは次のようになります
コードは次のとおりです | コードをコピー |
キャッチ(例外 $e) { //例外を処理します } |
Catch コードによってキャプチャされたオブジェクトは、例外を引き起こし、throw ステートメントに渡された (throw ステートメントによってスローされた) オブジェクトです。 Exception クラスのインスタンスを使用することは良い選択です。
Exception クラスは次の組み込みメソッドを提供します:
Getcode() — コンストラクターに渡されたコードを返します。
GetMessage() — コンストラクターに渡されたメッセージを返します。
getFile() ——例外コードを生成したファイルのパスを返します
getLine() ——例外を生成したコード行を返します。
注:
例外がキャッチされると、try() ブロックの後続のコードは実行を続行せず、一致する「キャッチ」コード ブロックを見つけようとします
例外がスローされた場合、キャッチ処理が実行されないと、「キャッチされない例外 'Exception'」エラーが報告されます
コードは次のとおりです | コードをコピー |
機能テスト($val){ If ($val>100){ throw new Exception("プロンプトメッセージ: 入力した値が大きすぎます"); } } テスト(111); ?> |
3. 例外がスローされた場合、catch ステートメントブロックは処理されるか処理されないかが決まります
以下はユーザー登録機能のコードの一部です
試してください{
// 入力されたフォームをチェックします
If(!filled_out($_POST)){
throw new Exception('まだフォームに記入していません。戻って記入してください');
}
//メールアドレスが無効であることを確認してください
If(!check_email($email)){
throw new Exception('メールの形式が正しくありません');
}
//密度の長さが 6 より大きいかどうかを確認します
If(strlen($passwd<6)){
throw new Exception('密度の長さは 6 より大きくなければなりません');
}
// 2 つのパスワードが等しいかどうかを確認します
If($passwd!=$passwd1){
throw new Exception('2 つのパスワードが異なります。再入力してください');
}
//ユーザー名の長さが正しいか確認します
If(strlen($username)>16){
throw new Exception('ユーザー名の長さが一致しません。再入力してください');
}
} catch(例外 $e){
Echo $e->getMessage(); //例外情報を出力します。
}
php は、Java と同じように try{}catch(){} を使用して例外を処理します
トップレベルの例外ハンドラーの定義に使用される関数は
set_例外_ハンドラー("私の例外");
ここでの My_expection は、開発者が定義した例外処理関数であり、プログラム内に例外を処理する関数がない場合にのみ、例外を処理するためのトップレベルの例外ハンドラーが存在します。例外ハンドラーが定義されている場合、システムはデフォルトで例外を処理する例外ハンドラーを使用します
。
例:
コードは次のとおりです | コードをコピー |
set_Exception_handler("My_expection"); 関数 My_expection(){ echo "これが最上位の例外ハンドラーです"; } 試してください{ nohello(「こんにちは」); }catch(例外 $e){ $e をスローします; } 関数 nohello($nohello){ if($nohello == "こんにちは"){ throw new Exception(「hello を入力できません」); }その他{ echo "入力成功"; } } ?> |