<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 容器 * 容器來更方便的管理類依賴及運行依賴注入。 * 容器類`think\container`。容器類主要是維護`$instances`容器對象數組,和`$bind`容器綁定標識。 * 容器類 可通過容器綁定標識,利用反射機制進行實例化對象,并綁定到容器對象數組中。 * 手動綁定到容器標識`$this->app->bind('標識名', '類名')`, 也可直接綁定一個對象到容器中`$this->app->bind('標識名', '對象')` * 配置文件綁定。 可通過app目錄下`provider.php`文件,進行配置需要綁定到容器標識。在App實例化的時候,批量加載此文件,進行綁定。 ### 依賴注入 * 利用容器類的反射機制進行實例化類的時候, 都支持依賴注入。如控制器架構方法,控制器操作方法,事件類的執行方法,中間件類的執行方法。或者使用`invoke()`助手函數,實例化對象。 * 將類綁定到容器標識的類,也可以支持依賴注入。 ### 調用 * 可通過app對象直接調用容器中的對象,如`$this->app->http`。框架會自動再容器對象數組中,獲取該對象,如果沒有,則查找容器標識數組,找出對應的類,進行實例化返回,并存儲這個實例到容器對象數組中。 ### 依賴注入 ### 容器 ### 門面 文章目錄 1.什么是依賴注入? 1.1 依賴注入的概念: 1.2 依賴注入的舉例: 2.什么是容器? 2.1 容器的概念: 2.2 容器的舉例: 3.門面是什么? 3.1 門面的概念: 3.2 門面的好處: 3.3框架已有的常用類的代理: 3.3 門面的舉例: 4.依賴注入和門面的對比: 4.1 依賴注入的實現方式: 4.2 門面(靜態代理)的實現方式: 4.3 使用父類的屬性的實現方法: 以下是關于 《最新ThinkPHP 5.1全球首發視頻教程》的第4章的筆記 1.什么是依賴注入? 1.1 依賴注入的概念: 依賴注入指的是將對象類型的數據以參數的方式傳到一個方法的參數列表中 1.2 依賴注入的舉例: ``` <?php class Site { public $siteNum=123; public function getNum() { return $this->siteNum; } } //Site $site這里就是依賴注入,等同于在方法里面寫$site=new Site(); function test(Site $site){ return $site->getNum(); } ``` 2.什么是容器? 2.1 容器的概念: 在tp中可以把類注冊進容器中,想用這個類的實例對象時,可用容器實例化一個類對象來使用。 2.2 容器的舉例: 將Demo1注冊進容器中,再用容器實例化一個Demo1對象。 ``` <?php namespace app\index\controller; class Index { public function bindClass(){ //1.把Demo1這個類注冊到容器中 //第一個參數是類的別名(可自定義),第二個參數是類的命名空間+類名 \think\Container::set('demo1','\app\index\controller\Demo1'); //2.把容器中的類實例化并取出 //第一個參數是類注冊時的別名,第二個參數是類的構造函數所需的參數名=>參數值 $demo1=\think\Container::get('demo1',['num'=>456]); //3.此時可以使用容器實例出的類對象來調用類方法 return $demo1->getName(); } } ``` 被注冊的類Demo1 ``` <?php namespace app\index\controller; class Demo1 { private $num; public function __construct($num){ $this->num=$num; } public function getName(){ return $this->num; } } ``` 3.門面是什么? 3.1 門面的概念: 如果想實現靜態的去調用一個類的所有的動態(和靜態)方法,則可以定義一個Facade的子類,定義一個方法用于返回該類,就可以想調用類方法時,從動態調用$class->function()變成靜態調用class::function() 3.2 門面的好處: 給所有的調用方式提供了一個同一的接口(都用靜態調用的形式),代碼清晰規范(不會到處都是對象),方便調試 3.3框架已有的常用類的代理: 其實tp框架中的常用類都定義了Facade類庫(位置為\think\facade目錄),定義后無需實例化就可以直接靜態調用類的方法。 3.3 門面的舉例: Demo1類中有一個getNum的方法 ``` <?php namespace app\index\controller; class Demo1 { private $num=123; public function getNum() { return $this->num; } } ``` 創建一個Facade類的子類,用來靜態代理Demo1類(建議同名因為便于管理) ``` <?php namespace app\facade; class Demo1 extends \think\Facade { //重寫Facade類的getFacadeClass函數,直接返回本子類所代理的真正類的命名空間 protected static function getFacadeClass() { return '\app\index\controller\Demo1'; } } ``` 代理完畢,現在在別的類中可以直接靜態調用Demo1的方法 ``` <?php namespace app\index\controller; use app\facade\Demo1; class Index { public function test(){ return Demo1::getNum(); } } ``` 如果上面的形式覺得不夠靈活,可以換成動態綁定代理關系,如下: 首先讓剛才創建的Facade的子類中的內容為空 ``` <?php namespace app\facade; class Demo1 extends \think\Facade { } ``` 然后在需要調用Demo1類的位置進行動態綁定bind(facade子類,子類所代理的類本身); 調用完bind()函數后就可以靜態調用Demo1的動態方法了。 ``` <?php namespace app\index\controller; class Index { public function test() { \think\Facade::bind('app\facade\Demo1','app\index\controller\Demo1'); return \app\facade\Demo1::getNum(); } } ``` 4.依賴注入和門面的對比: 假如目標是在一個控制器中獲取GET請求參數 4.1 依賴注入的實現方式: ``` <?php namespace app\index\controller; class Index { public function test(\think\Request $request) { dump($request->get()); } } ``` 4.2 門面(靜態代理)的實現方式: ``` <?php namespace app\index\controller; class Index { public function test() { dump(\think\facade\Request::get()); } } ``` 4.3 使用父類的屬性的實現方法: 繼承Controller后,使用Controller類中的保護型屬性$request(這是Request類實例) ``` <?php namespace app\index\controller; class Index extends \think\Controller { public function test () { dump($this->request->get()); } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看