ホームページ バックエンド開発 PHPチュートリアル 例外をいつ使用する必要があるか?_PHP チュートリアル

例外をいつ使用する必要があるか?_PHP チュートリアル

Jul 20, 2016 am 10:58 AM
個人の 使用 会社 存在する 異常な 私たち 重要な

最初に余談をさせてください。私は社内で非常に意味のあることを 2 つ行いました。1 つ目は PHP メール グループを設定することです。2 つ目は、現在両方とも 500 を超えるグループを設定しています。私は、学生がスムーズかつシンプルにコミュニケーションできるようにするためのコミュニケーション プラットフォームを構築することが、全員の問題が他人の問題になることを防ぐための基礎であり、前提条件であると常に信じてきました。直接的なメリット (追記: メールグループのアドレスについて多くの方が質問されました。本当に申し訳ありません。このメールグループは会社の内部メールグループです。Hi も社内です。ありがとうございます)

昨日。 、同僚がメールグループでこれについて言及しました 質問:

PHPで例外をいつ使用する必要がありますか? どのように機能しますか?

この問題は、長い間議論されてきた古典的な問題と見なされます。

例外とそれに対応するエラー コード (またはステータス コード)、およびそれらの長所と短所についてお話します。

エラーコード

まず第一に、進化論によれば、例外はエラーコードメカニズムのいくつかの欠点を自然に回避します。欠点としては

1 . エラー情報が豊富ではない

関数の戻り値は 1 つだけです (もちろん、Lua は複数の値を返すことができますが、実際には PHP で配列を返すのと同じです)。これまでに説明した関数の説明は次のとおりです。 成功した場合は戻ります ***、エラーが発生した場合は FALSE が返されます。ただし、関数エラーにはさまざまな理由が考えられ、単純な FALSE では呼び出し元に通知できないエラーの種類もあります。特定のエラー メッセージ。

ということで、そのような関数の説明をいくつか見てきました。戻り値が 0 より大きい場合は、成功ステータス コードを示します。戻り値が 0 より小さい場合は、エラー ステータス コードを示します。

ただし、これには関数が整数 (または数値) を返す必要があり、他の関数では 0、>0、

そのため、現時点では、特定のエラー情報を保存するために、グローバル エラー コードとエラー情報を使用する関数がいくつかあります。成功すると *** が返され、エラーが発生した場合は FALSE が返され、エラー コードはグローバル変数 $errno に格納されます (少なくとも、ほとんどの Linux ライブラリ関数はこのように記述されています

)。確かに、このメソッドは機能しますが、醜いと思いませんか?

2. エラー ステータス コードを追加するには、関数のシグネチャを変更する必要があるかもしれません

この関数は非常に単純です。非常に単純で、決して間違ったことはないと考えているので、次のように宣言します (例として C 言語を使用すると、PHP には戻り値の型のヒントがありません):

<ol class="dp-c">
<li class="alt"><span><span>void dummy() {  </span></span></li>
<li><span>} </span></li>
</ol>
ログイン後にコピー

しかし、この時点で、この関数をゆっくりと修正し、さらに多くの関数を追加しました。 , この関数は失敗する可能性があります。そして、この関数にはエラー戻りコードが追加されています。

PHP には戻り値の型の制限がないという人もいるかもしれませんが、PHP のコンストラクターについて考えてください。には戻り値がありません。エラーが発生した場合、Exception を使用しない場合は、エラーが発生しても実行を続行するには、die を選択するか、2 のメソッドを使用するしかないと思います。戻り値の型は実際には従来型です。すべての関数が使用される場合、戻り値がチェックされていない場合でも、この関数にエラー戻りコードを追加することはできません。

3. 次のいずれかの場合、エラー ステータス コードは無視される可能性があります。関数が失敗してエラー ステータス コードを返し、呼び出し元がこの戻り値を検出しなかった場合、どこでもリターン ステータス コードを検出すると、コードが非常に醜くなります。

<ol class="dp-c">
<li class="alt"><span><span><?php  </span></span></li><li><span>  </span><span class="keyword">if</span><span> (!call1()) {  </span></li><li class="alt"><span>      </span><span class="keyword">die</span><span>();  </span></li><li><span>  }  </span></li><li class="alt"><span>   </span><span class="keyword">if</span><span> (call2() != SUCCESS) {  </span></li><li><span>     </span><span class="keyword">die</span><span>();  </span></li><li class="alt"><span>  }  </span></li><li><span>   </span><span class="keyword">if</span><span> (call3() < 0) {  </span></li><li class="alt"><span>      </span><span class="vars">$msg</span><span> = error_get_last();  </span></li><li><span>      </span><span class="keyword">die</span><span>(</span><span class="vars">$msg</span><span>[</span><span class="string">"message"</span><span>]);  </span></li><li class="alt"><span>  } </span></li></ol>
ログイン後にコピー
例外メカニズム

それでは、例外メカニズムを見てみましょう。例外メカニズムを使用する場合、上記のコードは次のように記述できます:

<ol class="dp-c"><li class="alt"><span><span><?php  </span></span></li><li><span>try {  </span></li><li class="alt"><span>   call1();  </span></li><li><span>   call2();  </span></li><li class="alt"><span>   call3();  </span></li><li><span>} catch (Exception </span><span class="vars">$e</span><span>) {  </span></li><li class="alt"><span>   </span><span class="keyword">die</span><span>(</span><span class="vars">$e</span><span>->getMessage());  </span></span></li>
<li><span>} </span></li>
</ol>
ログイン後にコピー
コードが単なる中間層である場合、より便利になります。呼び出し側がエラーの処理を担当します。単純に次のように記述することもできます。
<ol class="dp-c">
<li class="alt"><span><span><?php  </span></span></li>
<li>
<span class="keyword">function</span><span> myFunc() {  </span>
</li>
<li class="alt"><span>   call1();  </span></li>
<li><span>   call2();  </span></li>
<li class="alt"><span>   call3();  </span></li>
<li><span>} </span></li>
</ol>
ログイン後にコピー
例外オブジェクトには、エラー メッセージ、エラー コード、エラー行番号、ファイル、さらにはエラー コンテキストなど、より豊富なエラー情報を含めることができます。 「1. エラー情報が不十分」の欠点を避けるために、関数のシグネチャを変更せずに void 型を返す関数に例外を追加することもできます。これにより、「2. エラー ステータス コードの追加には関数の変更が必要になる場合があります」という問題が発生しなくなります。 PHP の場合、新しく追加したエラーが捕捉されなくても、明らかに問題が発生するので心配しないでください。上記の「3. エラー ステータス コードが無視される可能性がある」という状況は起こりません。

ただし、いくつかの反対意見もあります 珍しいサウンドを使用してください:

1. パフォーマンス

記事の冒頭の質問にあるように、「どのようにパフォーマンスしますか?」 「例外メカニズムは、ステータス コードを返すメソッドよりも確かに高価です。C++ の場合、例外が発生すると、スタックの巻き戻しも発生します。

パフォーマンスと利便性は矛盾することがよくあります。私が言えることは、「トレードオフ。小さなモジュールを作成していて、そのライフサイクルが短く、特別なデザインパターンを必要としない場合は、例外なく実行できると思います。

而如果你在为一个庞大的软件做开发, 我想你更应该看重的, 应该是, 它的可扩展性, 可维护性.

2. 太多可能的Uncaught Exception

如果, 你调用了一个可能发生异常的函数, 但是却没有捕获这个异常, okey, Fatal Error了, 所以让我们的代码看起来:

<ol class="dp-c">
<li class="alt"><span><span><?php  </span></span></li>
<li><span>try {  </span></li>
<li class="alt"><span>} catch () {  </span></li>
<li><span>}....  </span></li>
<li class="alt"><span> try {  </span></li>
<li><span>} catch () {  </span></li>
<li class="alt"><span>}....  </span></li>
<li><span>try {  </span></li>
<li class="alt"><span>} catch () {  </span></li>
<li><span>} </span></li>
</ol>
ログイン後にコピー

然而, 这个是可以经过良好设计避免的, 比如我在设计

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445671.htmlTechArticle先说个题外话: 在公司做了俩件事, 是我觉得很有意义的, 第一就是成立了一个PHP邮件组, 第二就是成立了一个Hi群. 目前俩者都有超过500 ph...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

foob​​ar2000のダウンロード方法は? -foobar2000の使い方 foob​​ar2000のダウンロード方法は? -foobar2000の使い方 Mar 18, 2024 am 10:58 AM

foob​​ar2000 は、音楽リソースをいつでも聴くことができるソフトウェアです。あらゆる種類の音楽をロスレス音質で提供します。音楽プレーヤーの強化版により、より包括的で快適な音楽体験を得ることができます。その設計コンセプトは、高度なオーディオをコンピュータ上で再生可能 デバイスを携帯電話に移植し、より便利で効率的な音楽再生体験を提供 シンプルでわかりやすく、使いやすいインターフェースデザイン 過度な装飾や煩雑な操作を排除したミニマルなデザインスタイルを採用また、さまざまなスキンとテーマをサポートし、自分の好みに合わせて設定をカスタマイズし、複数のオーディオ形式の再生をサポートする専用の音楽プレーヤーを作成します。過度の音量による聴覚障害を避けるために、自分の聴覚の状態に合わせて調整してください。次は私がお手伝いさせてください

CrystalDiskmarkとはどのようなソフトウェアですか? -crystaldiskmarkの使い方は? CrystalDiskmarkとはどのようなソフトウェアですか? -crystaldiskmarkの使い方は? Mar 18, 2024 pm 02:58 PM

CrystalDiskMark は、シーケンシャルおよびランダムの読み取り/書き込み速度を迅速に測定する、ハード ドライブ用の小型 HDD ベンチマーク ツールです。次に、編集者が CrystalDiskMark と Crystaldiskmark の使用方法を紹介します。 1. CrystalDiskMark の概要 CrystalDiskMark は、機械式ハード ドライブとソリッド ステート ドライブ (SSD) の読み取りおよび書き込み速度とパフォーマンスを評価するために広く使用されているディスク パフォーマンス テスト ツールです。 ). ランダム I/O パフォーマンス。これは無料の Windows アプリケーションで、使いやすいインターフェイスとハード ドライブのパフォーマンスのさまざまな側面を評価するためのさまざまなテスト モードを提供し、ハードウェアのレビューで広く使用されています。

BTCC チュートリアル: BTCC 取引所で MetaMask ウォレットをバインドして使用する方法は? BTCC チュートリアル: BTCC 取引所で MetaMask ウォレットをバインドして使用する方法は? Apr 26, 2024 am 09:40 AM

MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

NetEase メールボックス マスターの使用方法 NetEase メールボックス マスターの使用方法 Mar 27, 2024 pm 05:32 PM

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「Ne​​tEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

Baidu Netdisk アプリの使用方法 Baidu Netdisk アプリの使用方法 Mar 27, 2024 pm 06:46 PM

クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。

Rise of Ronin プールの珍しいミッションのガイド Rise of Ronin プールの珍しいミッションのガイド Mar 26, 2024 pm 08:06 PM

プールの異常はゲームのサイド タスクです。多くのプレイヤーは、プールの異常のタスクを完了する方法を知りたがっています。実際には非常に簡単です。まず、受け入れる前に、水中での射撃のテクニックを習得する必要があります。タスクを実行し、悪臭の原因を調査します。後で、プールの下にたくさんの死体があることがわかりました。Rise of Ronin のプールでの珍しいタスクについてのこのグラフィック ガイドを見てみましょう。 Ronin Rise プールでの珍しいミッションのガイド: 1. 飯塚と話し、水中での射撃のテクニックを学びます。 2. 以下の図の場所に移動し、プール内の異常タスクを受け取ります。 3. ミッションの場所に行き、NPCに話しかけると、近くのプールで異臭が発生していることを知ります。 4. プールに行って調査します。 5.下の写真の場所まで泳いで水中に潜ると、大量の死体が見つかります。 6. カメラを使って死体の写真を撮ります。 7

Thunder を使用してマグネット リンクをダウンロードする方法 Thunder を使用してマグネット リンクをダウンロードする方法 Feb 25, 2024 pm 12:51 PM

ネットワーク技術の急速な発展により、私たちの生活も大きく便利になりました。その 1 つは、ネットワークを介してさまざまなリソースをダウンロードして共有できることです。リソースをダウンロードする過程で、マグネット リンクは非常に一般的で便利なダウンロード方法になりました。では、Thunder マグネット リンクを使用するにはどうすればよいでしょうか?以下、詳しくご紹介していきます。 Xunlei は、マグネット リンクを含むさまざまなダウンロード方法をサポートする非常に人気のあるダウンロード ツールです。マグネット リンクは、リソースに関する関連情報を取得できるダウンロード アドレスとして理解できます。

iOS 17.4の新しい高度な機能「盗難デバイス保護」の使い方を教えます iOS 17.4の新しい高度な機能「盗難デバイス保護」の使い方を教えます Mar 10, 2024 pm 04:34 PM

Appleは火曜日にiOS 17.4アップデートを公開し、iPhoneに多数の新機能と修正をもたらした。このアップデートには新しい絵文字が含まれており、EU ユーザーは他のアプリ ストアから絵文字をダウンロードすることもできます。さらに、このアップデートでは iPhone のセキュリティ制御も強化され、より多くの「盗難デバイス保護」設定オプションが導入され、ユーザーにより多くの選択肢と保護が提供されます。 「iOS17.3では、「盗難デバイス保護」機能が初めて導入され、ユーザーの機密情報のセキュリティが強化されています。ユーザーが自宅やその他の身近な場所から離れている場合、この機能ではユーザーは最初に生体認証情報を入力する必要がありますApple ID パスワードの変更や盗難デバイス保護の無効化など、特定のデータにアクセスして変更するには、情報を再度入力する必要があります。

See all articles