この記事では、PHP: 依存関係の挿入、制御の反転、および依存関係の反転の原則を紹介します。これには、必要な友人が参照できるように共有します。独自の基準: 高凝集性、低結合性。この問題を解決するために、PHP にはファクトリ パターンやシングルトン パターンなどの優れた設計パターンが多数あります。
コードに反映される設計パターンは、依存関係の注入と制御の反転のようなものです。
<br>それでは、依存性注入とは何ですか?
簡単に言うと、クラスAが依存するクラスB、CなどをクラスA内で直接インスタンス化するのではなく、属性やコンストラクターを通してクラスAに注入することを意味します。
一般的にコードを書くときはこんな感じで書きます
class EmailSendByQq { public function send(){ } } class User(){ public function register(){ $email = new EmailSendByQq(); $email->send(); } }
<br>
class User { private $_emailSendObject; public function __construct($emailSendObject) { $this->_emailSendObject = $emailSendObject; } public function register(){ $this->_emailSendObject->send(); }} $emailSendObject = new EmailSendByQq;$user = new User($emailSendObject);$user->register(); //以属性的方式同样也可以实现 class EmailSendBy163 { public function send(){ } } class User{ public $emailSendObject; public function register(){ $this->emailSendObject->send(); } } $user = new User;$user->emailSendObject = new EmailSendBy163();$user->register();
<br> コンストラクターと属性を介してオブジェクトを渡す上記のプロセスは、依存性注入の具体化です。
“注入”就是把一个实例传到另一个实例内部。 接下来继续把上面的代码优化,简单工厂模式的体现。
//通过EmailSendByQq和EmailSendBy163类,我们提炼出一个interface接口,让User类register方法依赖于interface接口的对象看起来更合适interface EmailSender{ public function send();}class EmailSendByQq implements EmailSender{ public function send(){ }}class EmailSendBy163 implements EmailSender{ public function send() { // TODO: Implement send() method. }}class User{ public $emailSenderClass; public function __construct(EmailSender $emailSenderObject) { $this->emailSenderClass = $emailSenderObject; } public function register(){ $this->emailSenderClass->send(); }}$user = new User(new EmailSendBy163);$user->register();
これによりデカップリングが実現します。
依存反転原理 (DIP) はソフトウェア設計のアイデアです。従来のソフトウェア設計では、上位層のコードは下位層のコードに依存しており、下位層のコードが変更されると、それに応じて上位層のコードも変更する必要があり、その結果、保守コストが高くなります。 DIP の中心的な考え方は、上位層がインターフェイスを定義し、下位層がこのインターフェイスを実装することで、下位層が上位層に依存するようになり、結合が減少し、システム全体の柔軟性が向上するというものです。これは効果が実証されている戦略です。<br>
関連する推奨事項:
以上がPHP: 依存関係の注入、制御の反転、依存関係の反転原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。