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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### :-: **自動加載基本原理** include 和 require 是PHP中引入文件的兩個基本方法。在小規模開發中直接使用 include 和 require 沒什么問題,但在大型項目中會造成大量的 include 和 require 堆積。這樣的代碼既不優雅,執行效率也很低,而且維護起來也相當困難。 **為了解決這個問題,部分框架會給出一個引入文件的配置清單,在對象初始化的時候把需要的文件引入。但這只是讓代碼變得更簡潔了一些,引入的效果仍然是差強人意。PHP5 之后,隨著 PHP 面向對象支持的完善,__autoload 函數才真正使得自動加載成為可能。** >[success] > **include 和 require 功能是一樣的,它們的不同在于 include 出錯時只會產生警告,而 require 會拋出錯誤終止腳本。** >[success] > **include_once 和 include 唯一的區別在于 include_once 會檢查文件是否已經引入,如果是則不會重復引入。** 實現自動加載最簡單的方式就是使用 __autoload 魔術方法。當在邏輯中實例化一個類,或者調用一個類的靜態方法時類沒有被引入,這個函數會被觸發,未定義的類名會被當作參數傳入。至于函數具體的邏輯,這需要用戶自己去實現。通常的做法是在這個函數里面通過類名構造出類文件所在的物理路徑,然后調用include或者require函數引入,這樣只要我們設置框架的時候類的命名規范和類的物理路徑遵循一定關系規范即可達到自動引入類文件的目的。 ### **其他參考** https://www.cnblogs.com/CpNice/p/4119925.html https://www.jb51.net/article/142696.htm http://www.php.cn/php-weizijiaocheng-371939.html ### :-: **thinkphp5.0 自動加載原理解析** **這里我們以thinkphp5.0里的自動加載機制為例,深度解析其實現原理** >[danger] >**如果你沒搭建斷點調試環境,請先移步 “調試環境的搭建” 章節,搭建環境后跟隨我的教程測試** ![](https://box.kancloud.cn/8cf7d3453d4524a0bf6330a5ec9a3ca5_801x318.png) base.php 里有這行代碼就是實現注冊加載的代碼,進去看代碼 ``` \think\Loader::register(); ``` ![](https://box.kancloud.cn/7309f154e9ad6111c76cf7e9687aeb1f_1268x784.png) 這部分代碼的本質是將 composer 自動生成的類映射文件屬性復制到 Loader 的屬性里 后面大家在使用 composer 里的類時候,會在這個屬性里查找 查看 autoload_static.php 里,這里面的類映射文件是在你使用 composer 下載類庫的時候自動生成 ![](https://box.kancloud.cn/ba953fa38fd6dfc937b3b4b3fae60fff_918x744.png) 在在295行的循環走完以后,查看 Loader 類的屬性會發現 autoload_static.php 里的屬性已經被復制過來 ![](https://box.kancloud.cn/f7b4ae4cc7d9a61d00b2b8b10280f45a_1206x749.png) 306行是將 thinkphp 自定義的核心庫添加到自動加載映射表中 這樣我們就可以使用 think 類內置的核心庫 比如 在我們調用這樣一行代碼時候 ,前面的 \think 這個命名空間就和 307 行的 那個鍵對應,系統會根據這個鍵取到后面的路徑 即 `LIB_PATH . 'think' . DS`,真實路徑為` E:\localweb\public_local2\thinkphp\library` 然后根據 `\think\Db` 構造出類的真實路徑` E:\localweb\public_local2\thinkphp\library\think\Db.php ` 實現類的自動加載
                  <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>

                              哎呀哎呀视频在线观看