ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHPチュートリアルの例外処理クラスの使用方法の詳細な説明

PHP_PHPチュートリアルの例外処理クラスの使用方法の詳細な説明

WBOY
リリース: 2016-07-13 16:56:23
オリジナル
872 人が閲覧しました

この記事では、PHP で一般的に使用される簡単な例外処理クラスを紹介します。詳しく説明する必要がある学生は参照してください。

コードは次のとおりです コードをコピー
{
を試してください $a=10/0;
}catch (例外 $e){
echo "例外をスローします";
}
?>

上記のコードは「スローされた例外」を出力しませんが、次のエラー メッセージを出力します: 警告: Division by zero in...

注: try ブロックは例外をスローしませんが、システムのデフォルトのエラー処理メカニズムに従って例外を処理します

したがって、例外をキャッチできるかどうかは、実際に例外がスローされるかどうかによって決まります

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

クラス例外
{
Protected $message = '不明な例外' // 例外メッセージ
; protected $code = 0 // ユーザー定義の例外コード
; protected $file; // 例外が発生したファイル名
protected $line; // 例外が発生したコード行番号

関数 __construct($message = null, $code = 0);

最終関数 getMessage() // 例外メッセージを返す
最終関数 getCode(); // 例外コードを返す
Final function getFile(); // 例外が発生したファイル名を返します
Final function getLine(); // 例外が発生したコード行番号を返します
最終関数 getTrace() // backtrace() 配列
Final function getTraceAsString(); // 文字列にフォーマットされた getTrace() 情報

/* オーバーロード可能なメソッド */
Function __toString() // 出力可能な文字列
; }
?>

簡単な使用法は次のとおりです: (例外を通じてエラーメッセージをスローします)

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

試してください{
$error = '私のエラー!';
新しい例外($error)をスローします
} catch (例外 $e) {
echo $e->getMessage();
}

使いやすくするためにこのクラスを拡張できます

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

クラス MyException は Exception を拡張します
{
// コンストラクターを再定義して、メッセージを指定する必要があるプロパティにします
パブリック関数 __construct($message, $code = 0) {
//カスタマイズされたコード

// すべての変数が正しく割り当てられていることを確認します
親::__construct($message, $code);
}

// 文字列出力のスタイルをカスタマイズします
パブリック関数 __toString() {
__CLASS__ を返します。 ": [{$this->code}]: {$this->message}n";
}

パブリック関数customFunction() {
echo "このタイプの例外に対するカスタム関数";
}
}

例外処理の基本的な考え方は、コードが 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 "入力成功";
}
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631616.html技術記事この記事では、PHP で一般的に使用される簡単な例外処理クラスを紹介します。詳しく説明する必要がある学生は参照してください。 コードは次のとおりです コードをコピーします ?ph...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート