Tp5.1Container類解讀

Thinkphp5.1引入了容器類來管理各種對象,使用註冊數模式管理對象,還使用了php的反射機制實現對象之間的依賴和注入。

Container的重要屬性

1.$instances = array();  存放對象的一個數組

2.$bind = array(     //默認的標識=>類名,獲取實例時,當傳入標識,可以通過這個屬性找到類名,然後進行實例化操作。

        'app' => App::class,...

);

3.$name = [];當容器有對象的時候,就寫入標識=>實例

自 PHP 5.5 起,關鍵詞 class 也可用於類名的解析。使用 ClassName::class 你可以獲取一個字符串,包含了類 ClassName 的完全限定名稱。

$bind屬性寫好了框架默認的一些標識=>類名,如果需要動態添加自定義的標識=>類名,可以在application/provider.php寫入對應的數組。框架初始化的時候會merge到$bind屬性中。

Container的重要方法

1.make($abstract, $vars = [], $newInstance = false),創建實例,$abstract可以是類名或者標識,如果是標識,需要是在$bind屬性中定義好的,或者在provider.php中添加的。找到對應的類名後,就調用invokeClass($class, $vars = []);

2.invokeClass($class, $vars = []),利用反射機制創建實例,$class是類名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章