首頁 > 後端開發 > php教程 > 為什麼在ThinkPHP添加Composer自動載入無效?

為什麼在ThinkPHP添加Composer自動載入無效?

WBOY
發布: 2023-03-02 14:02:01
原創
3437 人瀏覽過

我在ThinkPHPindex.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 因為是一個函數,所以只能被定義一次。

應該是可以存在多個的。

回覆內容:

我在ThinkPHPindex.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';了。

為什麼在ThinkPHP添加Composer自動載入無效?

噗,我知道是什麼原因導致了...之前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>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板