php composer 使用 以及 psr0和psr4的真正區別


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 空間名稱和包名就不一樣





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM