默認的ThinkPHP將調用function __autoload()來查找相應的類文件,或者可以通過define('APP_AUTOLOAD_REG',1)來調用spl_autoload_register(array('Think', 'autoload'));
但是我看了一下Think::autoload和__autoload函數是一模一樣的,所以看不出這兩種方式有什么實質的不同.
另外可以通過設置項目配置文件里的APP_AUTOLOAD_PATH參數來添加自定義的加載路徑.
1、這里的加載路徑是要符合一定規則的,目錄之間分隔符用點來替換斜杠.
2、自定義加載路徑必須在當前項目的類庫目錄中,或者ThinkPHP的基類目錄中,或者其他項目的類庫目錄中.
如果開頭是@則到當前項目的類庫目錄中查找,比如@.ORG.Page
如果開頭是'think','org','com'之一則到ThinkPHP目錄中查找,比如ORG.DB.Db,則會查找ThinkPHP/Lib/ORG/Db/Db.class.php
已經加載過的類文件的類名會存儲在一個static數組中,當要加載一個類文件之前會先去判斷數組是否該數組中是否存在該類名(包括別名檢測),如果沒有則加載,否則不加載,如果發現導入了不同的位置下面的同名類庫文件,系統會提示沖突.
ThinkPHP雖然不像ThinkPHP中那樣自由地定義自動加載規則,但是通過指定“默認查找的加載路徑”這樣的方法是比較簡單而且對于應用來說我認為是足夠了,因為很少情況需要去定義一個自動加載規則,另外zend的自動加載機制比較準確,直接定位到目標文件的位置,而ThinkPHP會去每個“自動加載搜索路徑”中去匹配是否存在該文件,當然Tp中匹配該文件并不是去遍歷搜索路徑目錄區匹配,而是直接定位.
|
新聞熱點
疑難解答
圖片精選