理解PHP 依賴注入與容器
阿新 • • 發佈:2020-07-15
<?php //依賴注入與容器 class Luntai{ function roll(){ echo "這是輪胎類::"; } } class Bmw{ protected $Luntai; //注入方式---建構函式注入,還可通過set方式注入 function __construct($Luntai) { $this->Luntai = $Luntai; } function run() { $this->Luntai->roll(); //呼叫luntai類的 roll方法 echo "這是寶馬的輪胎"; } } //使用方法 /*$luntai = new Luntai(); $bmw = new Bmw($luntai); $bmw->run(); //這是輪胎類::這是寶馬的輪胎 */ /** * 容器 */ class Container { //存放所要繫結的類 static $register = []; //繫結函式 //closure 就是個閉包的型別 static function bind($name, Closure $col) { //將鍵值對存到register中 //鍵就是name 值就是col self::$register[$name] = $col; } //建立物件函式 static function make($name){ $col = self::$register[$name]; return $col(); } } //將要例項化的類,繫結到register中去。 //以後用到的時候只需要通過make方法獲取即可,不需要再重複例項化 ,類似於redis 鍵值對 Container::bind('luntai', function(){ return new Luntai(); }); Container::bind('bmw', function(){ return new Bmw(Container::make('luntai')); }); $bmw = Container::make('bmw'); //根據鍵值呼叫bmw類,並使用其方法 $bmw->run();