検索

  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. コードをコピーします
上記のコードでは、次のようなエラーが発生します。 メッセージ: 値は 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()), '' ;//エラー情報は配列として表示されます
    17. echo '
      エラー情報は文字列として表示されます:', $e->getTraceAsString(), '
      ';//エラー情報は文字列として表示されます* /
    18. echo $e->getMessage(), '
      ';//エラーメッセージ
    19. echo '
      ', $e->getTraceAsString() , '
      ' ;//エラー情報は文字列として表示されます
    20. }
    21. }
    22. //$data=array("111","33333") //通常のテスト
    23. "8129233"; //異常なテスト
    24. throwTest($data)?>
    25. ; 興味があるかもしれない記事:
    26. PHPの例外処理クラスExceptionの使用例
    PHP5の例外処理、エラースロー、コールバック関数など phpの例外処理、エラースロー、エラーコールバック関数

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションがすでに開始されているかどうかを確認するにはどうすればよいですか?PHPセッションがすでに開始されているかどうかを確認するにはどうすればよいですか?Apr 30, 2025 am 12:20 AM

PHPでは、session_status()またはsession_id()を使用して、セッションが開始されたかどうかを確認できます。 1)session_status()関数を使用します。 php_session_activeが返された場合、セッションが開始されました。 2)SESSION_ID()関数を使用します。空の文字列が返された場合、セッションが開始されます。どちらの方法でもセッション状態を効果的に確認でき、使用する方法を選択することは、PHPバージョンと個人的な好みに依存します。

Webアプリケーションでセッションを使用することが不可欠なシナリオを説明してください。Webアプリケーションでセッションを使用することが不可欠なシナリオを説明してください。Apr 30, 2025 am 12:16 AM

Sessionsionsionsarevitalinwebapplications、特にコマースプラットフォームの前。

PHPでの同時セッションアクセスをどのように管理できますか?PHPでの同時セッションアクセスをどのように管理できますか?Apr 30, 2025 am 12:11 AM

PHPでの同時セッションアクセスの管理は、次の方法で実行できます。1。データベースを使用してセッションデータを保存します。これらの方法は、データの一貫性を確保し、並行性のパフォーマンスを向上させるのに役立ちます。

PHPセッションを使用することの制限は何ですか?PHPセッションを使用することの制限は何ですか?Apr 30, 2025 am 12:04 AM

phpsessionshaveverallimitations:1)storagecconstraintscanleadtoperformanceissues; 2)securityvulnerablesliasitylikessessionfixationAttacksicexist;

負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。Apr 29, 2025 am 12:42 AM

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

セッションロックの概念を説明します。セッションロックの概念を説明します。Apr 29, 2025 am 12:39 AM

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの選択肢はありますか?PHPセッションの選択肢はありますか?Apr 29, 2025 am 12:36 AM

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

PHPのコンテキストで「セッションハイジャック」という用語を定義します。PHPのコンテキストで「セッションハイジャック」という用語を定義します。Apr 29, 2025 am 12:33 AM

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版

SublimeText3 Mac版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。