ホームページ >バックエンド開発 >PHPチュートリアル >PHP: 依存関係の注入、制御の反転、依存関係の反転原理

PHP: 依存関係の注入、制御の反転、依存関係の反転原理

不言
不言オリジナル
2018-04-20 11:53:181929ブラウズ

この記事では、PHP: 依存関係の挿入、制御の反転、および依存関係の反転の原則を紹介します。これには、必要な友人が参照できるように共有します。独自の基準: 高凝集性、低結合性。この問題を解決するために、PHP にはファクトリ パターンやシングルトン パターンなどの優れた設計パターンが多数あります。

コードに反映される設計パターンは、依存関係の注入と制御の反転のようなものです。

<br>それでは、依存性注入とは何ですか?

簡単に言うと、クラスAが依存するクラスB、CなどをクラスA内で直接インスタンス化するのではなく、属性やコンストラクターを通してクラスAに注入することを意味します。

一般的にコードを書くときはこんな感じで書きます

class EmailSendByQq {    
public function send(){    
}
}
class User(){
    public function register(){       
     $email = new EmailSendByQq();       
      $email->send();    
      }
      }
<br>Userクラスのregister登録メソッドを呼び出し、Emailクラスをインスタンス化してメールを送信します。 User クラスが EmailSendByQq クラスに依存していることがわかります。これがないと、User クラスは電子メールを送信できません。ただし、QQ メールボックスを使用せず、代わりに 163 (EmailSendBy163) を使用する場合は、EmailSendByQq のインスタンス化を変更する必要があります。各クラスでコントロールを使用する場合は、これら 2 つのクラスの分離を逆にしたほうがよいでしょう

<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>

<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: 依存関係の注入、制御の反転、依存関係の反転原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。