1. 程式人生 > >關於laravel 自動載入和依賴注入、服務容器、服務提供者的理解--1

關於laravel 自動載入和依賴注入、服務容器、服務提供者的理解--1

class Container {     protected $binds;      protected $instances;     public function bind($abstract, $concrete)     {         if ($concrete instanceof Closure) {             $this->binds[$abstract] = $concrete;         } else {             $this->instances[$abstract] = $concrete;         }     }     public function make($abstract, $parameters = [])     {         if (isset($this->instances[$abstract])) {             return $this->instances[$abstract];         }         array_unshift($parameters, $this);         return call_user_func_array($this->binds[$abstract], $parameters);     } } // 建立一個容器(後面稱作超級工廠) $container = new Container; // 向該 超級工廠新增超人的生產指令碼 $container->bind('superman', function($container, $moduleName) {     return new Superman($container->make($moduleName));      //重點注意這裡 $container->make($moduleName)就是IoC模式中 向Superman類注入的例項 }); // 向該 超級工廠新增超能力模組的生產指令碼 $container->bind('xpower', function($container) {     return new XPower; }); // 同上 $container->bind('ultrabomb', function($container) {     return new UltraBomb; }); // ****************** 華麗麗的分割線 ********************** // 開始啟動生產 $superman_1 = $container->make('superman', 'xpower'); $superman_2 = $container->make('superman', 'ultrabomb'); $superman_3 = $container->make('superman', 'xpower'); // ...隨意新增