原理
~~~
1.任何的URL訪問,最終都是定位到控制器,由控制器中的某個具體的方法去執行
2.一個控制器對應著一個類,如果這些類需要進行統一的管理,怎么辦?
* 容器:容器來進行管理(但是容器并不管理控制器類,因為控制器類是用戶直接訪問的),
還可以將類的實例作為參數,傳遞給類方法,自動觸發依賴注入
*
* 依賴注入:將對象類型的數據,以參數的方式傳到方法的參數列表中
*
* URL訪問:通過GET方式將數據傳到控制器指定的方法中,但是只能傳字符串,數值
*
* 如果要傳一個對象到當前方法中?怎么辦?
* 依賴注入:解決了向類中的方法傳對象的問題
~~~
簡單代碼示例:
~~~
class Demo
{
//可以通過字符串,數值用GET方式來傳值到類方法中
public function getName($name = 'Peter')
{
return 'Hello'.$name;
}
public function getMethod(Temp $temp)
{
$temp->setName('PHP是全世界最好的編程語言');
return $temp->getName();
}
//綁定一個類到容器
public function bindClass()
{
//把一個類放到容器中:相當于注冊到容器中
\think\Container::set('temp','\app\common\Temp');
//將容器中的類實例化并取出來用:實例化的同時調用構造器進行初始化
$temp = \think\Container::get('temp',['name'=>'Peter_zhu']);
return $temp->getName();
}
//綁定一個閉包到容器:
public function bindColsure()
{
//把一個閉包放到容器中:相當于注冊到容器中
\think\Container::set('demo',function($domain){
return 'PHP是全世界最好的編程語言:'.$domain;
});
//將容器中的閉包取出來用
return \think\Container::get('demo',['domain'=>'www.daijiandong.com']);
}
}
~~~