PHP例外処理関連の知識

Jul 25, 2016 am 09:00 AM

  1. //例外を含む関数を作成
  2. function checkNum($number)
  3. {
  4. if($number>1)
  5. {
  6. throw new Exception("値は 1 以下である必要があります") ;
  7. }
  8. return true;
  9. //トリガー例外
  10. ?>
上記のコードは次のようなエラーを受け取ります。 致命的なエラー: キャッチされない例外「例外」 C:webfoldertest.php:6 に「値は 1 以下である必要があります」というメッセージが含まれる スタック トレース: #0 C:webfoldertest.php(12): checkNum(28) #1 {main} が C:webfoldertest.php の 6 行目でスローされました 試して、投げて、捕まえて 上記の例のエラーを回避するには、例外を処理する適切なコードを作成する必要があります。 処理手順には以下を含める必要があります。 Try - 例外を使用する関数は、「try」ブロック内に置く必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。 Throw - 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります。 Catch - 「catch」コード ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します

例外をトリガーしてみましょう:

//例外をスローできる関数を作成します
    function checkNum($number)
  1. {
  2. if($number>1)
  3. {
  4. throw new Exception("値は 1 である必要があります)以下");
  5. }
  6. return true;
  7. }
  8. //「try」コードブロックで例外をトリガーする
  9. try
  10. {
  11. checkNum(2);
  12. // 例外がスローされた場合、このテキストは表示されません
  13. echo 'これが表示された場合、番号は 1 以下です';
  14. }
  15. //例外をキャッチ
  16. catch(Exception $e)
  17. {
  18. echo 'Message: ' .$e->getMessage(); }
  19. ?>
  20. コードをコピーします
  21. 上記のコードでは、次のようなエラーが発生します。 メッセージ: 値は 1 以下である必要があります 説明例: 上記のコードは例外をスローし、それをキャッチします。 checkNum()関数を作成します。数値が 1 より大きいかどうかを検出します。その場合は、例外をスローします。 「try」ブロックで checkNum() 関数を呼び出します。 checkNum() 関数で例外がスローされる 「catch」コード ブロックは例外を受け取り、例外情報を含むオブジェクト ($e) を作成します。 この例外オブジェクトから $e->getMessage() を呼び出して、この例外からのエラー メッセージを出力します
ただし、「各スローはキャッチに対応する必要がある」という原則に従うために、見逃したエラーを処理する最上位の例外ハンドラーをセットアップできます。 カスタム例外クラスを作成する カスタム例外ハンドラーの作成は非常に簡単です。 PHP で例外が発生したときに関数が呼び出される特殊なクラスを作成しただけです。このクラスは例外クラスの拡張である必要があります。 このカスタム例外クラスは、PHP の例外クラスのすべてのプロパティを継承しており、カスタム関数を追加できます。

例外クラスの作成を開始します。

classcustomException extends Exception
{
    public function errorMessage()
  1. {
  2. //エラーメッセージ
  3. $errorMsg = '行 '.$this->getLine() でエラーが発生しました。' '.$this->getFile()
  4. .': '.$this->getMessage().' は有効な電子メール アドレスではありません
  5. return $errorMsg ;
  6. }
  7. }
  8. $email = "someone@example...com";
  9. 試してみる
  10. {
  11. //
  12. if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  13. {
  14. //電子メールが無効な場合は例外をスローします
  15. throw newcustomException($email)
  16. }
  17. }
  18. catch (customException $e)
  19. {
  20. //カスタムメッセージを表示します
  21. echo $e->errorMessage(); ?>
  22. コードをコピー
  23. この新しいクラスは、古い例外クラスのコピーに errorMessage() 関数を加えたものです。 古いクラスのコピーであるため、古いクラスからプロパティとメソッドが継承され、getLine()、getFile()、getMessage() などの例外クラスのメソッドを使用できます。 説明例: 上記のコードは例外をスローし、カスタム例外クラスを通じてそれをキャッチします。 CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。 errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。 $email 変数に不正な電子メール アドレス文字列を設定する 電子メール アドレスが無効であるため、「try」コード ブロックを実行して例外をスローします。 「catch」コード ブロックは例外をキャッチし、エラー メッセージを表示します

    複数の例外

    スクリプトに複数の例外を使用して、複数の状況を検出できます。

    複数の if..else コード ブロックまたは switch コード ブロックを使用したり、複数の例外をネストしたりできます。これらの例外では、異なる例外クラスが使用され、異なるエラー メッセージが返される場合があります。

    1. classcustomException extends Exception
    2. {
    3. public function errorMessage()
    4. {
    5. //エラーメッセージ
    6. $errorMsg = '行 '.$this->getLine() でエラーが発生しました。' '.$this->getFile()
    7. .': '.$this->getMessage().' は有効な電子メール アドレスではありません
    8. return $errorMsg ;
    9. }
    10. }
    11. $email = "someone@example.com";
    12. 試してみる
    13. {
    14. // if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
    15. {
    16. // 例外をスローするメールアドレスが無効な場合
    17. throw newcustomException($email);
    18. }
    19. //メールアドレスに「example」があるかチェック
    20. if(strpos($email, "example") !== FALSE)
    21. {
    22. throw new Exception ("$email は電子メールの例です");
    23. }
    24. }
    25. catch (customException $e)
    26. {
    27. echo $e->errorMessage()
    28. }
    29. catch(Exception $e)
    30. {
    31. echo $e->getMessage();
    32. }
    33. ?>
    コードをコピー
    説明例: 上記のコードは 2 つの条件をテストします。いずれかの条件が true でない場合は、例外がスローされます。 CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。 errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。 コードの「try」ブロックを実行すると、最初の条件では例外はスローされません。 電子メールには文字列「example」が含まれているため、2 番目の条件により例外がトリガーされます。 「catch」コード ブロックは例外をキャッチし、適切なエラー メッセージを表示します

    customException がキャッチされず、基本例外がしっかりとキャッチされた場合、例外はそこで処理されます。 例外を再スローします

    例外がスローされたときに、標準の方法とは異なる方法で例外を処理したい場合があります。例外は「catch」ブロックで再度スローできます。

    スクリプトはシステムエラーをユーザーから隠す必要があります。システム エラーはプログラマにとって重要かもしれませんが、ユーザーはそれらに興味がありません。ユーザーが簡単にできるように、わかりやすいメッセージを付けて例外を再度スローできます。

    1. classcustomException extends Exception
    2. {
    3. public function errorMessage()
    4. {
    5. //エラーメッセージ
    6. $errorMsg = $this->getMessage().' は有効な E- ではありませんメールアドレス。';
    7. return $errorMsg; }
    8. }
    9. $email = "someone@example.com";
    10. try
    11. {
    12. //メールアドレスの「example」をチェックする
    13. if( strpos($email, "example") !== FALSE)
    14. {
    15. //電子メールが無効な場合は例外をスローします
    16. throw new Exception($email)
    17. }
    18. }
    19. catch(Exception $e)
    20. {
    21. / /re-throw 例外
    22. throw newcustomException($email);
    23. }
    24. }
    25. catch (customException $e)
    26. {
    27. //カスタムメッセージを表示
    28. echo $e->errorMessage()
    29. }
    30. ?> ;
    31. コードをコピー

    説明例: 上記のコードは、電子メール アドレスに文字列「example」が含まれているかどうかを検出します。その場合は、再度例外をスローします。 CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。 errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。 $email 変数を有効な電子メール アドレスに設定しますが、文字列「example」が含まれます。 「try」ブロックには別の「try」ブロックが含まれているため、例外を再度スローできます。 電子メールに文字列「example」が含まれているため、例外がトリガーされます。 「catch」は例外をキャッチし、「customException」を再スローします。 「customException」がキャッチされ、エラー メッセージが表示されます。

    例外が現在の "try" ブロックでキャッチされない場合は、より高いレベルで catch ブロックを探します。

    トップレベルの例外ハンドラーを設定する

    set_Exception_handler() 関数は、キャッチされなかった例外をすべて処理するユーザー定義関数を設定できます。

    1. function myException($Exception)
    2. {
    3. echo "Exception: " , $Exception->getMessage()
    4. }
    5. set_Exception_handler( 'myException');
    6. throw new Exception('キャッチされない例外が発生しました');
    コードをコピー
    上記のコードの出力は次のようになります。 例外: キャッチされない例外が発生しました 上記のコードには「catch」ブロックはなく、代わりにトップレベルの例外ハンドラーがトリガーされます。この関数は、キャッチされなかった例外をすべてキャッチするために使用する必要があります。 珍しいルール 例外処理を必要とするコードは、潜在的な例外をキャッチするために try ブロック内に配置する必要があります。 すべての try ブロックまたは throw ブロックには、対応する catch ブロックが少なくとも 1 つ必要です。 複数の catch ブロックを使用して、さまざまな種類の例外をキャッチします。 例外は、try ブロック内の catch ブロックで再スローできます。

    つまり、例外がスローされた場合は、それをキャッチする必要があります。

    出典: http://bbs.it-home.org/w3school/php/php_Exception.html

    例:

      function throwTest($data)
    1. {
    2. try
    3. {
    4. if (!is_array($data) || emptyempty($data))
    5. {
    6. throw new Exception('data型は配列ではありません', 445);
    7. }
    8. echo('テスト完了!!')
    9. }
    10. catch (Exception $e)
    11. {
    12. /*echo 'エラーメッセージ:',$e-> getMessage( ), '
      ';//エラーメッセージ
    13. echo '
      エラーコード:', $e->getCode(), '
      ';//エラーコード
    14. echo '
      エラー ファイル:', $e->getFile(), '
      ';//エラー ファイル
    15. echo '
      エラー行番号:', $e-&gt ;getLine (), '
      ';//エラー行番号
    16. echo '
      エラー情報を配列で表示:', print_r($e->getTrace()), '< /pre>' ;//エラー情報は配列として表示されます</li>
      <li> echo '<pre class="brush:php;toolbar:false">エラー情報は文字列として表示されます:', $e->getTraceAsString(), '
      ';//エラー情報は文字列として表示されます* /
    17. echo $e->getMessage(), '
      ';//エラーメッセージ
    18. echo '
      ', $e->getTraceAsString() , '
      ' ;//エラー情報は文字列として表示されます
    19. }
    20. }
    21. //$data=array("111","33333") //通常のテスト
    22. "8129233"; //異常なテスト
    23. throwTest($data)?>
    24. ; 興味があるかもしれない記事:
    25. PHPの例外処理クラスExceptionの使用例
    PHP5の例外処理、エラースロー、コールバック関数など phpの例外処理、エラースロー、エラーコールバック関数

    単純なPHPカスタム例外クラス PHP エラーと例外設定を学ぶ

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

See all articles