<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # thinkphp5.1容器流程分析 # (一)容器部分 ## 創建實例流程 Container 1. 容器標識別名 $this->name \[app\]=>think\\App 2. 容器對象實例 $this->instance 3. 容器綁定標識 $this->bind \[app\]=>think\\App 4. 容器中的對象實例 $this->instances \[think\\App\] =>think\\App Object ## 第一次回調 第一次make 以入口文件為例: 1. 先查看容器標識別名 $this->name中是否存在 如果存在就返回別名 不存在就返回app 2. 查看注冊樹中是否存 $this->instances\[app\]中是否存在值 如果存在就直接返回注冊樹中的實例 如果沒有則跳過這一部分 繼續往下執行 3. 從容器綁定的標識中查找 看是否存在 $this->bind\[app\] 存在就把 think\\App賦值給變量 $concrete 在判斷變量是不是閉包 肯定不是閉包 所以執行else 4. 就存在了 $this->name\[app\]= think\\App; 然后再遞歸回調make函數 ## 第二次回調 第二次回調make 第二次make的時候 參數不再是app 而是 think\\App 1. 先查看容器標識別名 $this->name中是否存在 如果存在就返回別名 不存在就返回think\\App 2. 查看注冊樹中是否存 $this->instances\[think\\App\]中是否存在值 如果存在就直接返回注冊樹中的實例 如果沒有則跳過這一部分 繼續往下執行 3. 從容器綁定的標識中查找 看是否存在 $this->bind\[think\\App\] 存在 但是不存在 所以走else 4. 使用$this->invokeClass方法 根據反射 創建一個實例 5. 把創建的實例 存到$this->instances\[\]中 ## 流程圖 1. 執行應用并響應 Container::get('app')->run->send(); 2. 會執行 Container::get() 方法 3. 執行 static::getInstance() 返回 Container的實例 4. Container 調用make()方法 第一個參數是App 5. 第一次執行make()方法會返回$this->bind(‘app’)的標識 也就是think\\App 第二次再調用的make()方法是參數就是think\\App 會直接走 $obj = $this->invoClass($abstaract,$vars); 6. 在invokerClass()方法中利用反射機制 會返回對應的實例 7. 最終Container::get(app)就會返回Container的實例
                  <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>

                              哎呀哎呀视频在线观看