我在
ThinkPHP的
index.php添加如下:
// 添加第三方庫自動載入require './vendor/autoload.php';
但是,在使用的時候提示類不存在。
但是在Controller添加require,是可以使用的。
require APP_PATH.'../vendor/autoload.php';
是什麼原因導致的呢?是不是類載入器只能存在一個?ThinkPHP也寫了一個,導致覆蓋了Composer的類載入器?
大家有知道的嗎?謝謝大家。
我看這個提問裡面,有個答主,說是英文文檔裡面的。
spl_autoload_register 可以很好地處理需要多個載入器的情況,這種情況下 spl_autoload_register 會按順序依次調用之前註冊過的載入器。作為對比, __autoload 因為是一個函數,所以只能被定義一次。
應該是可以存在多個的。
回複內容:
我在ThinkPHP的index.php添加如下:
// 添加第三方庫自動載入require './vendor/autoload.php';
但是,在使用的時候提示類不存在。
但是在Controller添加require,是可以使用的。
require APP_PATH.'../vendor/autoload.php';
是什麼原因導致的呢?是不是類載入器只能存在一個?ThinkPHP也寫了一個,導致覆蓋了Composer的類載入器?
大家有知道的嗎?謝謝大家。
我看這個提問裡面,有個答主,說是英文文檔裡面的。
spl_autoload_register 可以很好地處理需要多個載入器的情況,這種情況下 spl_autoload_register 會按順序依次調用之前註冊過的載入器。作為對比, __autoload 因為是一個函數,所以只能被定義一次。
應該是可以存在多個的。
5.0版本支援Composer安裝的類庫的自動載入,你可以直接按照Composer依賴庫中的命名空間直接調用。
意思就是說,thinkphp已經把composer的那套自動載入機制合并進去了,你只需要用composer下載依賴類庫,下載好後,在需要的地方用use匯入命名空間就可以了,不需要自己再寫上require APP_PATH.'../vendor/autoload.php';了。
噗,我知道是什麼原因導致了...之前require是在ThinkPHP.php,引入之後,其實在require './ThinkPHP/ThinkPHP.php';的時候,就已經開始在執行ThinkPHP的核心代碼了,已經通過路由進入到Controller裡面了...
Wrong:
// 引入ThinkPHP入口檔案require './ThinkPHP/ThinkPHP.php';// 添加第三方庫自動載入require './vendor/autoload.php';
Right:
// 添加第三方庫自動載入require './vendor/autoload.php';// 引入ThinkPHP入口檔案require './ThinkPHP/ThinkPHP.php';