### :-: **自動加載基本原理**
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]
>**如果你沒搭建斷點調試環境,請先移步 “調試環境的搭建” 章節,搭建環境后跟隨我的教程測試**

base.php 里有這行代碼就是實現注冊加載的代碼,進去看代碼
```
\think\Loader::register();
```

這部分代碼的本質是將 composer 自動生成的類映射文件屬性復制到 Loader 的屬性里
后面大家在使用 composer 里的類時候,會在這個屬性里查找
查看 autoload_static.php 里,這里面的類映射文件是在你使用 composer 下載類庫的時候自動生成

在在295行的循環走完以后,查看 Loader 類的屬性會發現 autoload_static.php 里的屬性已經被復制過來

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
` 實現類的自動加載
- 序言
- 圖片預覽
- 詮釋高效開發
- 提問的智慧
- GIT命令參考
- 安裝composer
- 斷點調試技巧
- 調試環境的搭建
- 調試工具的使用及技巧
- 前置基礎-TP底層講解
- 理解編程的抽象
- 耦合與解耦
- 自動加載
- 反射類
- 控制反轉(IOC)和依賴注入(DI)
- iThink 自定義依賴注入的實現
- 常用設計模式
- SPL標準庫
- 行為-鉤子-插件
- AOP-面向切面
- RBAC和Auth類的本質
- 安裝iThink
- 環境要求
- 代碼下載與環境配置
- 執行安裝
- 體驗測試模塊
- apache配置
- nginx配置
- 系統架構詳解
- 目錄詳解
- 執行流程圖
- 數據字典
- RBAC 權限管理架構
- 系統分層詳解
- 控制器層(controller)
- 邏輯層(logic)
- 視圖層(view)
- 模型層(model)
- 服務層(service)
- 應用包架構詳解
- 目錄結構
- 開發規范
- 數據庫規范
- 編碼規范
- 功能設計原則與規范
- 后臺功能詳解
- 基礎功能
- RBAC + Auth 權限機制
- 應用化功能機制
- 代碼生成器(重要)
- 應用骨架代碼生成
- 數據表 CURD 代碼生成
- 頁面構造器(重要)
- 通用元素構造器
- 表格元素構造器
- 搜索表單元素構造器
- 表單元素構造
- 閉包事物構造器
- 應用的開發
- 函數參考