オブジェクト指向のPHP_phpスキルの5大原則であるDipendency Inversion Principle(DIP)の詳細説明
この記事では、オブジェクト指向 PHP の 5 つの主要原則である依存関係反転原則 (DIP) を主に紹介し、依存関係反転原則の概念と原理を簡単に説明し、PHP 依存関係反転原則の関連する定義と使用方法を分析します。この記事では、オブジェクト指向 PHP の 5 つの主要な原則の依存関係反転原則 (DIP) を例を示して説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
依存関係の逆転とは何ですか?簡単に言うと、
依存関係を依存関係インターフェイスに反転するということです。具体的な概念は次のとおりです:
1. 上位モジュールはすべて抽象化 (親) に依存すべきではありません。クラスはサブクラスに依存できません。すべてがサブクラスに依存します) (抽象クラスの場合)2. 抽象化は具体性に依存することはできず、具体性は抽象化に依存する必要があります。
ここでいうインターフェースは、狭義のインターフェース
ではないことに注意してください。なぜインターフェースに依存するのでしょうか?インターフェイスは問題の抽象化を具体化しており、抽象化は一般に比較的安定しているか、比較的頻繁に変更されないため、具象は変更可能です。したがって、依存関係の抽象化は、コード拡張とランタイム バインディング (ポリモーフィズム) を実装するための基礎となります。抽象クラスのサブクラスが実装されている限り、そのクラスのすべてのユーザーがそれを使用できます。ここでは、スケーラビリティの概念が強調されます。通常、拡張性とは既知の動作の拡張を指しますが、インターフェイスについて話すときは、インターフェイスが相対的である必要があるとも言われます。これは、設計パターンがどれほど高度であっても、コードを変更せずに絶えず変化する状況を実現することは不可能であることを示しています。オブジェクト指向の 5 つの原則の中で、依存関係の逆転は理解と実装が最も難しいと思います。
ここでは従業員クラスを例に挙げます<?php interface employee { public function working(); } class teacher implements employee { public function working() { echo 'teaching...'; } } class coder implements employee { public function working() { echo 'coding...'; } } class workA { public function work() { $teacher = new teacher(); $teacher->working(); } } class workB { private $e; public function set(employee $e) { $this->e = $e; } public function work() { $this->e->working(); } } $worka = new workA; $worka->work(); $workb = new workB; $workb->set(new teacher()); $workb->work();workA では、work メソッドは教師の実装に依存しますが、workB では、work は代わりに抽象化に依存するため、必要なオブジェクトをパラメータを通じて渡すことができます。上記のコードはインターフェイスを通じてある程度の分離を実現しますが、それでも限界があります。インターフェイスを使用するだけでなく、ファクトリを使用しても、ある程度の分離と依存関係の逆転を実現できます。 workBでは、setメソッドを通じて教師インスタンスを渡し、ファクトリパターンを実現しています。このような実装はまだハードコーディングされているため、コードをさらに拡張するには、この依存関係を構成ファイルに書き込み、workB がプログラムによって具体的に構成された教師オブジェクト (依存クラス ファイルが存在するかどうかなど) を必要とすることを示します。 ) ) およびロード設定で依存する実装は、IOC コンテナーと呼ばれます。 IOC (Inversion of Control) の概念は多くの記事で見られますが、実際、IOC は依存性反転原則 (DIP) の同義語です。 IOC について言及するときに、DI などの概念について言及する人もいるかもしれません。 DI、つまり依存性注入。一般に、依存性注入 (DI) と依存性ルックアップ (DS) は IOC の 2 つの実装であると考えられています。しかし、いくつかの一般的な概念の進化に伴い、これらの概念間の関係があいまいになり、IOC が DI であると考える人もいます。 IOC よりも依存性注入の説明の方が適切であると考える人もいますが、これらの概念間の関係はここでは複雑になりません。 古典的な J2EE 設計では、DAO 層と Servicen 層は通常、インターフェイス層と実装層に分割され、依存関係が構成ファイルで構成されます。これは最も一般的な DIP アプリケーションです。 Spring フレームワークは、コードから IOC ウィンドウへの制御を分離する優れた IOC コンテナです。これは、Spring が実行中に構成ファイルの設定に従ってオブジェクト間の依存関係を確立します。 以下のコードに示すように
<bean scopre="prototype" class="cn.notebook.action.NotebookListOtherAction" id="notebookListOtherAction"> <property ref="userReplyService" name="userReplyService" /> <property ref="userService" name="userService" /> <property ref="permissionService" name="permissionService" /> <property ref="friendService" name="friendService" /> </bean>ただし、このような設定には依然として問題があり、設定ファイルはますます大きくなり、それらの関係はますます複雑になります。また、アプリケーションやビジネスの変化に応じて常にコードを変更するという悪夢から逃れることはできません (ここでは、構成ファイルはコードの一部とみなされます。また、実際の開発では、構成ファイルを単純に変更することはほとんどありません。一般に、設定ファイルが変更されると、コードもそれに応じた変更が行われます) PHPでは、Springを模倣したような実装もあります。つまり、依存関係を設定ファイルに記述し、必要なオブジェクトは設定を通じて生成されます。ファイル。このようなコードは実装のためにまだ実装されていると思います。 Srping では、構成ファイルはクラスの実行時の依存関係だけでなく、トランザクション管理、AOP、遅延読み込みなども構成します。 PHP で上記の機能を実現するには、消費量が膨大になります。言語の観点から見ると、PHP のような動的スクリプト言語は、いくつかの多態性機能の実装においてコンパイル言語とは異なります。第二に、PHP はアジャイル開発言語として、迅速な開発、明確なロジック、およびよりシンプルで理解しやすいコードを重視します。さまざまなデザイン パターン フレームワークを追加することは、技術的な実装と運用効率の観点からお勧めできません。依存関係の逆転の中心原理は分離です。この最も原始的な原則から逸脱することは、本末転倒です。 実際、依存関係の反転の原則はすでに多くの設計パターンに暗黙的に組み込まれており、意図的または非意図的にいくつかの依存関係の反転作業も行っています。ただ、PHP としては、現時点では比較的完全な IOC コンテナが存在せず、おそらく PHP にはそれがまったく必要ないのかもしれません。 DIPに会ったら:
1. 各上位クラスは、必要なサービスのインターフェイス宣言を提案し、下位クラスはこのインターフェイスを実装します。
2. 各高レベルのクラスは、この抽象インターフェイスを通じてサービスを使用します。
関連する推奨事項:
PHP の 5 つのオブジェクト指向原則のリスコフ置換原則 (LSP) の詳細な説明 - クロージャ原則 (OCP) の詳細な説明
以上がオブジェクト指向のPHP_phpスキルの5大原則であるDipendency Inversion Principle(DIP)の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、PHPについて説明し、その完全なフォーム、Web開発での主要な使用、PythonとJavaとの比較、および初心者の学習のしやすさについて説明します。

PHPは、$ \ _ postおよび$ \ _を使用してフォームデータを処理し、検証、消毒、安全なデータベースインタラクションを通じてセキュリティを確保します。

この記事では、PHPとASP.NETを比較して、大規模なWebアプリケーション、パフォーマンスの違い、セキュリティ機能への適合性に焦点を当てています。どちらも大規模なプロジェクトでは実行可能ですが、PHPはオープンソースであり、プラットフォームに依存しませんが、ASP.NET、

PHPの症例感度は変化します:関数は鈍感であり、変数とクラスは感度があります。ベストプラクティスには、一貫した命名と、比較のためにケース非感受性関数を使用することが含まれます。

この記事では、PHPのページリダイレクトのさまざまな方法について説明し、ヘッダー()関数に焦点を当て、「すでに送信されているヘッダー」エラーなどの一般的な問題に対処します。

記事では、PHPでヒントを示すタイプについて説明します。これは、機能内の予想データ型を指定する機能です。主な問題は、タイプの施行を通じてコードの品質と読みやすさを改善することです。

この記事では、PHPのデータベースアクセスの拡張機能であるPHPデータオブジェクト(PDO)について説明します。これは、データベースの抽象化やより良いエラー処理など、準備されたステートメントとMySQLIに対する利点を通じてセキュリティを強化する上でのPDOの役割を強調しています。

記事では、PHP APIの作成とセキュリティについて説明し、LaravelなどのフレームワークやBest Security Practicesなどのフレームワークを使用して、エンドポイントの定義からパフォーマンスの最適化までの手順を詳細に説明します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

Dreamweaver Mac版
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ホットトピック









