我在ThinkPHP
的index.php
加如下:
<code>// 添加第三方库自动加载 require './vendor/autoload.php';</code>
但是,在使用的時候提示類不存在
。
但是在Controller
添加require
,是可以使用的。
<code>require APP_PATH.'../vendor/autoload.php'; </code>
是什麼原因導致的呢?是不是類別載入器只能存在一個? ThinkPHP也寫了一個,導致覆蓋了Composer的類別載入器?
大家有知道的嗎?謝謝大家。
我看這個提問裡面,有個答主,說是英文文檔裡面的。
spl_autoload_register 可以很好地處理需要多個載入器的情況,這種情況下 spl_autoload_register 會按順序依序呼叫之前註冊過的載入器。作為對比, __autoload 因為是一個函數,所以只能被定義一次。
應該是可以存在多個的。
我在ThinkPHP
的index.php
加如下:
<code>// 添加第三方库自动加载 require './vendor/autoload.php';</code>
但是,在使用的時候提示類不存在
。
但是在Controller
添加require
,是可以使用的。
<code>require APP_PATH.'../vendor/autoload.php'; </code>
是什麼原因導致的呢?是不是類別載入器只能存在一個? 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:
<code>// 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php'; // 添加第三方库自动加载 require './vendor/autoload.php';</code>
Right:
<code>// 添加第三方库自动加载 require './vendor/autoload.php'; // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php';</code>