堅牢なPHPアプリケーションを構築する:防御プログラミング戦略
この記事では、PHP開発における防御プログラミングの重要性を調査し、アプリケーションの堅牢性と効率を改善するためのいくつかの重要な戦略を提供します。防御プログラミングは、テスト駆動型の開発を避けることではなく、問題が発生する前に潜在的な障害点を予測し、回避することです。
コアポイント:
- 防御プログラミングは、潜在的な障害点を予測し、発生する前にそれらを回避するための措置を講じるように設計されています。
- "速い障害、エラーを大声で報告する" は、効果的な防御プログラミング方法です。特にAPIなどの外部システムからのユーザー入力または入力を処理する場合、エラーが早期に表示されて警告する必要があります。 入力の検証、比較での予期しない割り当ての防止、例外処理を試して/キャッチすること、およびデータベーストランザクションは、防御プログラミングの重要な側面です。
防御プログラミングの定義:
防御プログラミングは、簡単に言えば、潜在的な障害ポイントを予測する目的でプログラムすることです。目標は、これらの問題が発生する前に回避することです。多くの人々は防御的なプログラミングに反対しますが、これは多くの場合、彼らが見る防御的なプログラミング方法のいくつかが原因です。防御プログラミングは、テスト駆動型の開発を避けたり、単に障害を修正する方法と見なされるべきではありません。
「高速失敗」は、防御プログラミングの反対と見なされるべきではありません。どちらも同じカテゴリに属します。プログラムの障害の可能性を予測し、これらの障害を防止または適切に処理しない場合、これらの方法は何ですか?
速く速く、エラーを大声で報告します
単純に言うと、「迅速に失敗し、エラーが大声で報告された」とは、エラーが発生すると、できるだけ早く発生し、エラー状態で静かに実行し続けるのではなく、関係者に警告することを意味します。問題。このメソッドは、スクリプト、モジュール、またはシステムの外側(APIを介して)からのユーザー入力または入力を処理する場合に最も役立ちます。アプリケーションシナリオの1つは、関数に渡された無効な値またはデータ型を確認することです。
一部のプログラマーが「高速障害」メソッドを使用するエラーの1つは、それらを適切に処理する準備をせずにユーザーに例外とエラーを投げるだけです。エラーメッセージに平均的なユーザーが心配または混乱することを望んでいません。さらに重要なことは、悪意のあるユーザーが表示されている情報から何かを学ぶことを望まないことです。ユーザーに有用なメッセージを表示し、エラーを記録し、その例外の結果である必要がある他のタスクを実行します。あなたはただ
function thisTestFunction($testInt) { if (!is_int($testInt)) { // 执行某些操作 } }速いの失敗を望んでいません、あなたはまたloud (問題があることを知っている)とセキュリティが必要です(悪い例外処理や例外の完全な欠如があります取り扱いはより多くのセキュリティの問題を引き起こします)。 入力検証
ユーザー入力を安全に検証する方法はたくさんあります。
タイプ変換は、ユーザー入力を「検証」する興味深い方法です。時々それは次のようになります:
function thisTestFunction($testInt) { if (!is_int($testInt)) { // 执行某些操作 } }
他の方法を使用してクロスサイトのスクリプト攻撃を避ける代わりに、単にキャプチャ、タイプ変換、および値を割り当てます。これは、予想されるタイプがあり、そのタイプの値が安全である場合にのみ機能します(それ以外の場合は、適切な整数値を確認する必要があります)。このアプローチの問題は(ほとんどの場合)、filter_input()
$member->property = (int)$_GET['property'];関数を使用することには多くの利点があります。上記の記事またはPHP.NETで詳細をご覧ください。
filter_input
これは、シンプルで、しばしば守備的なプログラミングの原則です。比較方法に簡単な変更を加えることは、大きな影響を与える可能性があります。次の状況を考慮してください:
これは比較的正常な比較ですよね?しかし、「==」の代わりに「=」を誤って使用するとどうなりますか(または、ほとんどの場合、「==」)?キーボードの指のシンプルなスワイプ?忘れっぽい、多分?突然、あなたの比較は常に、すべての場合に真実です。あなたのIDEがあなたにこれを警告しない限り、あなたがそれを発見するのにどれくらい時間がかかりますか?場合によっては、これはしばらくの間、サイレントエラーになる可能性があります。ただし、これを防ぐための非常に簡単な方法があります。
$member->property = filter_input(INPUT_GET, 'property', FILTER_VALIDATE_INT); if (false === $member->property) { throw new Exception('Property was not an int'); }
今、誤って等しい符号を使用している場合、エラーは沈黙しません。明らかに、これは頻繁には発生しない可能性があります。テストによって軽減される可能性があり、すべての場合、特に可変性と変動の比較を行う場合は実用的ではありません。しかし、もしあなたが起こる傾向があるなら、これはまだ悪い考えではありません。
if ($member->property == 12345) { // 执行很酷的操作 } else { // 不执行任何有趣的操作 }
トライ/キャッチと例外を処理します
Try/Catchステートメントは、PHP開発者の間の別のホットトピックです。まず、私たちが議論していることを簡単に見てみましょう。
防御プログラミングのためのよく知られているツールは、Try/Catchステートメントと例外クラスです。正しく使用すると、エラーをキャッチしてログに記録するのに最適です。優れたプログラマーは、Try/Catchステートメントを使用して、通常のプロセスの中断を引き起こす可能性のあるエラーまたはその他の状況を予測します。これらの例外が発生した場合、適切な方法で処理する必要があります。必要に応じて、アプリケーションのユーザーは、機密情報を漏らすことなく、可能な限り便利な合理的なエラーメッセージを受信する必要があります。アプリケーションの管理者は、詳細なアラートやログを受信する必要があります。未処理または無視された例外は、「エラーを大声で報告する」という提案を無視し、プログラムが自然界で一定期間サイレントエラー状態になることを可能にする可能性があります。これは、関係者にとっては良くありません。
if (12345 == $member->property) { // 执行很酷的操作 } else { // 不执行任何有趣的操作 }
business トランザクションは、クエリをグループ化できるようにするデータベースの機能であり、1つのクエリが失敗した場合、すべてのクエリが失敗するようにします。これは酸の実装であり、こちらについて詳しく読むことができます。アイデアは、複数のクエリを1つのプロセスに組み合わせることは、特にクエリが相互依存している場合、より安全で安定したソリューションになる場合があるということです。 PHP開発者は、多くの場合、トランザクションを完全に無視したり、不要であると仮定したりしますが、一部の防御プログラミングは、データベースと対話するときに大いに役立つ可能性があります。この記事では、トランザクションがより深く説明されていますが、要するに、トランザクションでは、MySQLの更新を実行してから、実際のが
をコミットする前に結果を確認することができます。 PDOを使用している場合(必要です)、PDOメソッドを使用してトランザクションを開始し、結果をコミットし、ロールバックできます。上記のトランザクションの概要に加えて、この詳細なガイドを通じてさらに研究することができます。
結論これらはいくつかの一般的なトリックです。明らかに、それぞれにその目的があり、それぞれに適用されないという重要な状況があります。しかし、これらの概念を日常の開発体制に組み込むと、仕事の効率を高めることができます。これは通常、現在PHPを学習している開発者により適したトピックですが、誰にとっても、実践の良いレビューです。
特に新しい開発者にとって、覚えていることが1つしかない場合、防御プログラミングを行う必要があるということです。これは、間違っている可能性があります。それらを適切に処理します。サイレントエラーが発生し続けないでください。すぐに失敗しました。コードをテストします。問題をテストおよび解決する堅牢なアプリケーションを構築し、将来の問題を予測および処理することにより、アプリケーションをより信頼性を高め、舞台裏でより良いユーザーエクスペリエンスを作成するのに役立つことができます。以上がPHPでの防御プログラミングのためのその他のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

Laravelのサービスコンテナとサービスプロバイダーは、そのアーキテクチャの基本です。 この記事では、サービスコンテナ、詳細サービスプロバイダーの作成、登録、および実用的な使用法を例で説明します。 Oveから始めます

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









