composer 使用
項目和庫之間唯一的區別是,你的項目是一個沒有名字的包
包名不區分大小寫,但慣例是使用小寫字母,並用連字符作為單詞的分隔
入門比較好資源:
官網適合讀一遍 https://docs.phpcomposer.com/02-libraries.html
本地包創建 https://segmentfault.com/a/1190000010891972
模塊化介紹 https://laravel-china.org/articles/5333/modular-development-of-php-based-on-composer
psr0和psr4的真正區別
讀完官方原文https://www.php-fig.org/psr/psr-0/ 和 https://www.php-fig.org/psr/psr-4/ 發現沒區別 本質上真的沒區別都是說命名空間對應到目錄,
0比4多了 一條類名的_下划線轉換成目錄。
那么4比0多了一個 命名空間前綴和目錄的替換關系 當加載類的時候類名空間指定的前綴會被替換成路徑再加上后面的子空間和類名 構成實際加載地址。
而0沒有這個對應關系。命名空間直接轉換為目錄再加上指定的目錄前綴構成實際的加載地址。
psr4
在composer中的實踐,我理解大概是這樣的psr4中在composer.json里面配置的映射關系 composer install的時候寫入vendor/composer/autoload_psr4.php
供加載使用。
{
"autoload": {
"psr-4": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": ""
}
}
}
psr0
在composer中的實踐,我理解大概是這樣的psr0中在composer.json里面配置的映射關系 composer install的時候寫入vendor/composer/autoload_namespaces.php
供加載使用。
{
"autoload": {
"psr-0": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": "src/",
"Vendor_Namespace_": "src/"
}
}
}
纖細看下這里 https://docs.phpcomposer.com/04-schema.html#PSR-0
重點
包名和命名空間可以不一樣。
我理解vendor會根據composer install vendorname/pkname命令的 vendorname/pkname 自動生成vendorname/pkname目錄把代碼
下載到此目錄。
https://github.com/guzzle/promises 空間名稱和包名就不一樣
