composer 與php autoload,命名空間

composer 與php autoload,命名空間

composer 是一個依賴管理軟件,簡單點說就是按照指定規則給你下載對應的依賴包;
composer 是第三軟件 跟php 沒有關係 需要獨立安裝;
composer 需要在對應文件夾配置composer.json 配置文件 沒有配置直接執行 composer require phpoffice/phpexcel 命令會 自動幫你生成配置文件 並且對應配置好信息;
composer 下載完依賴會直接創建一個vendor 文件夾 裏面有 autoload.php 自動加載文件以及其他規範的自動加載規則;

php自動加載
就是當在php 中實例化類找不到時,php 會去調用已經註冊的自動加載方法,在方法裏面實現類的引入
實現方式下面的方法,當在這裏實例化類找不到會自動調用此方法
1:在當前文件實現 _aotuload($classname){
}

2:通過 spl_aotuload_register ($funtion) 方法註冊自動加載回調函數,當出現類找不到 php 會從所有註冊過的方法中順序回調對應的方法直到找到對應類引入;

Q:自動加載如何區分同名類的路徑?
A:通過命名空間,在實例化類時必須通過命名空間指定實例化那個類,然後根據命名空間去找對應的類(命名空間跟文件路徑不是一致的,這裏的對應關係是項目自行維護,一般情況下同一個依賴庫內部相當位置是確定的);

命名空間
通過指定文件的別名區分項目中重複的類名

使用:在php 文件最開始 用 namespace xxx/xxxx 定義 主要作用是通過命名空間區分文件位置,或者說在項目中的相當位置

命名空間可以隨意定義,不一定要跟文件路徑吻合,但是在文件中相同命名空間只能有一個同名類,否則會報錯

實例化類時 可以通過在類文件頭部使用 use xxx/xxx/class 這樣指定使用對應的類,注意這裏 並不會自動引入對應的類,引入需要通過自動加載實現
不使用 use 關鍵字 也可以直接實例化是 通過 new /xxx/xxx/clsss();這樣指定命名空間的實例化方式創建類,注意區分 new /xxx/classnew xxx/class (指當前文件命名空間/xxx/class)

總結: use 是使用命名空間的 關鍵字,這樣做是在相同文件下實例化相同命名空間的類 可以少寫命名空間 use 不直接引入文件,引入需要依賴自動加載機制;
命名空間是爲了自動加載時區分對應的類的文件位置,如果都用 require_once 則不需要命名空間,命名空間最終目的就是在require 文件時能找準文件

自動加載 是通過回調註冊方法 的方式實現,php 會一次輪詢已經註冊的回調方法,直到找到對應類文件,否則返回 class not fond
composer 下載的類庫會使用規範的自動加載機制,使用composer 的類庫只要引入 vender 文件的 autoload.php 則會實現自動加載,使用的時候要通過use 對應命名空間指定對應的類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章