依存性注入の原則:
依存性注入は、ハードコードされた依存関係を切り離して、ソフトウェア設計を可能にする方法です。コンパイル時に変更できるパターン。つまり、クラス メソッドで関連クラスをより簡単に呼び出すことができるようになります。
説明例:
次のようなクラスがあるとします:
class Test { public function index(Demo $demo,Apple $apple){ $demo->show(); $apple->fun(); } }
インデックス メソッドを使用したい場合は、これを行う必要があります。
$demo = new Demo(); $apple = new Apple(); $obj = new Test(); $obj->index($demo,$apple);
index メソッドを呼び出すのは面倒ですか?上記のメソッドにはパラメータが 2 つしかありませんが、それ以上のパラメータがある場合は、より多くのオブジェクトをパラメータとしてインスタンス化する必要があります。 「依存性注入」を導入すると呼び出し方法は以下のようになります。
$obj = new dependencyInjection(); $obj->fun("Test","index");
上記の例では、Test クラスのインデックス メソッドは Demo クラスと Apple クラスに依存しています。
「依存関係の注入」とは、すべてのメソッドが「依存する」クラスを特定し、それらをパラメーター値としてメソッドに「注入」することです。
dependencyInjection クラスは、この依存関係注入タスクを完了します。
<?php /** * Created by PhpStorm. * User: zhezhao * Date: 2016/8/10 * Time: 19:18 */ class dependencyInjection { function fun($className,$action){ $reflectionMethod = new ReflectionMethod($className,$action); $parammeters = $reflectionMethod->getParameters(); $params = array(); foreach ($parammeters as $item) { preg_match('/> ([^ ]*)/',$item,$arr); $class = trim($arr[1]); $params[] = new $class(); } $instance = new $className(); $res = call_user_func_array([$instance,$action],$params); return $res; } }
mvc フレームワークでは、制御で複数のモデルが使用されることがあります。依存性注入とクラスの自動ロードを利用する場合は以下のように利用できます。
public function index(UserModel $userModel,MessageModel $messageModel){ $userList = $userModel->getAllUser(); $messageList = $messageModel->getAllMessage(); }
推奨チュートリアル: PHP ビデオ チュートリアル
以上がPHP での依存関係注入の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。