ホームページ バックエンド開発 PHPチュートリアル PHPで特定の種類の例外をキャッチする方法の詳細な説明

PHPで特定の種類の例外をキャッチする方法の詳細な説明

Jan 02, 2018 pm 05:47 PM
php 異常な 詳しい説明

例外キャプチャは、ショートカット キーを使用して現在の多くの IDE ツールに簡単に追加でき、ユーザーが理解できないエラーを確認したり、原因不明のクラッシュが発生してユーザー エクスペリエンスが低下することを防ぎます。わかりやすいクラッシュ プロンプトを表示するだけでも、error:xxxx xxxxxxxxx を直接表示するよりもはるかに優れています。この記事では、PHP がどのように例外をスローし、特定の種類の例外をキャッチするかを詳しく紹介します。皆さんの参考になれば幸いです。

異常とは何ですか?

PHP 5 は、新しいオブジェクト指向のエラー処理メソッドを提供します。

例外処理は、指定されたエラー (例外) 状況が発生したときに、スクリプトの通常のフローを変更するために使用されます。この状況を例外と呼びます。

例外がトリガーされると、通常は次のことが起こります:

現在のコードの状態が保存されます

コードの実行が事前定義された例外ハンドラー関数に切り替わります

状況に応じて、ハンドラーはコードの実行を再開する、スクリプトの実行を終了する、またはコード内の別の場所からスクリプトの実行を続行する

さまざまなエラー処理方法を示します:

例外の基本的な使用方法

カスタム例外ハンドラーを作成する

複数の例外

例外を再スローする

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

PHP が例外をスローし、特定の種類の例外をキャッチする最終的な目標は、コードを実行し続けることができるように、対応するソリューションを提供することです。

この記事のテスト環境:PHP5.5.36 Safari 9.1.2

 1 <?php
 2 header("content-type:text/html; charset=utf-8");
 3 /**
 4 * 包裹重量异常
 5 */
 6 class HeavyParcelException extends Exception {}
 7 
 8 /**
 9 * 包裹类
10 */
11 class Parcel {
12 
13   /**
14   * 包裹寄送目的地地址
15   */
16   public $address;
17 
18   /**
19   * 包裹重量
20   */
21   public $weight;
22 }
23 
24 /**
25 * 派送员
26 */
27 class Courier {
28  
29   /** 
30   * 运送
31   */
32   public function ship(Parcel $parcel) {
33     //check we have an address
34     //如果包裹的目的地为空
35     if(empty($parcel->address)) {
36       throw new Exception(&#39;address not Specified(未填写地址)!&#39;);
37     } 
38 
39     //check the weight
40     //如果重量超过5
41     if($parcel->weight > 5) {
42       throw new HeavyParcelException(&#39;Parcel exceeds courier limit(包裹超过运送上限)!&#39;);
43     } 
44 
45     //otherwise we&#39;re coll
46     return true;
47   }
48 }
49 
50 $myCourier = new Courier();
51 $parcel = new Parcel();
52 //add the address if we have it 为了测试这里不填写地址
53 $parcel->weight = 7;
54 try {
55   $myCourier->ship($parcel);
56   echo "parcel shipped";
57 } catch (HeavyParcelException $e) {//捕获HeavyParcelException 不写这个异常的类型名字,就跑到普通Exception抛出去了
58   echo "Parcel weight error(重量错误): " . $e->getMessage();
59   //redirect them to choose another courier
60 } catch (Exception $e) {
61   echo "Someting went wrong(地址错误): " . $e->getMessage();
62   //exit so we don&#39;t try to proceed any further
63   exit;
64 }
65 echo &#39;<br/>&#39;;
66 $a = 123;
67 echo $a;
ログイン後にコピー

54行目からのコード実行シーケンス:

55 >

32 >

35 (最初に確認してください) ship メソッド 間違っているのは、アドレスが空であり、行 57>Exception,而非57行的HeavyParcelException) >

60(捕获到Exception) >

616263 输出地址错误 exit;不会输出65到67行了

 Tips:

 我感觉这一块最重要的就是搞清楚代码执行的顺序。写几段,然后改一改跑一跑。

 1.捕获的顺序,要看try中的代码中throw的是哪个类型的Exception,然后才看 catch里的顺序。

 2.57行的捕获的是特定的类型HeavyParcelException不能写错,或写Exception都会有问题。可以自己试试。

  1)例如地址不为空,57行写成了HeavyParcelException111,就会,在60行它的父类对象中捕获到,重量错误。这不是我们想要的。

      2)例如地址为空,57行写成了Exception,会抛出地址错误,但捕获的却是本来负责重量的catch

60 (ExceptionHeavyParcelException の代わりに Exception がスローされることです。 /code> がキャプチャされます) >

616263 出力アドレスエラー exit 行 65 ~ 67 は出力されません

ヒント:

これが最も重要だと感じますコードの実行順序を理解する領域です。いくつかの段落を書き、修正して実行します。

1. キャプチャの順序は、try のコード内でどのタイプの Exceptionthrow であるかによって異なり、次に を確認します。 catch の順序。 2.57 行目は、特定のタイプの HeavyParcelException をキャプチャします。これを間違って書くことはできません。Exception を記述すると問題が発生します。自分で試してみることもできます。

1) たとえば、アドレスが空ではなく、57 行目が HeavyParcelException111 と記述されている場合、重みエラーは 60 行目の親クラス オブジェクトにキャプチャされます。これは私たちが望んでいることではありません。

2) たとえば、アドレスが空で、57 行目が Exception として記述されている場合、アドレス エラーがスローされますが、キャッチされるのは catch です。もともと体重を担当していた。これは私たちが望んでいることでもありません。 関連する推奨事項:

🎜🎜🎜🎜PHP例外ハンドラーのカスタマイズ🎜🎜🎜🎜🎜🎜PHPが画像認識を実装する方法🎜🎜🎜🎜🎜🎜PHPがプロセスロックとマルチプロセスを実装する方法🎜🎜 🎜

以上がPHPで特定の種類の例外をキャッチする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles