宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產(chǎn)品動(dòng)態(tài)
精選推薦

PHP如何使用Composer來自動(dòng)加載項(xiàng)目文件?

管理 管理 編輯 刪除


Composer

Composer是PHP的依賴管理工具。它允許您聲明您的項(xiàng)目所依賴的庫(kù), 并且它將為您管理 (安裝/更新) 它們。它以每個(gè)項(xiàng)目為基礎(chǔ)管理它們, 并將它們安裝在項(xiàng)目?jī)?nèi)的目錄 (如 vendor) 中. 默認(rèn)情況下, 它不會(huì)在全局范圍內(nèi)安裝任何內(nèi)容。因此, 它是一個(gè)依賴關(guān)系管理器。

1. composer安裝

下載composer.phar文件,即可在任意操作系統(tǒng)上通過PHP運(yùn)行軟件包工具,更新時(shí)可直接重新下載文件;

https://docs.phpcomposer.com/,中文文檔。修改環(huán)境變量后要重啟軟件、重啟CMD才會(huì)重新加載

下載地址

http://composer.p2hp.com/download

2. 修改composer倉(cāng)庫(kù)鏡像地址

2.1 全局配置


# 修改鏡像地址
$ php composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
# 重置鏡像地址
$ composer config -g --unset repos.packagist

2.2 單個(gè)項(xiàng)目配置

在項(xiàng)目目錄下的composer.json文件內(nèi)加入以下配置信息


"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}

3. composer命令

comoesr 的require/update都可以更新指定的依賴包(升級(jí)/降級(jí))。

  • require更為靈活些,未安裝則進(jìn)行安裝,已安裝則根據(jù)傳入的版本號(hào)進(jìn)行升級(jí)或降級(jí)。
  • update則無(wú)法在命令行傳入指定的版本號(hào),需要先手動(dòng)編輯composer.json,指定新的版本號(hào),然后執(zhí)行更新命令。
  • install可以用于項(xiàng)目初始化后,初次安裝依賴,且會(huì)優(yōu)先讀取composer.lock中的版本號(hào),以盡可能的保證協(xié)作開發(fā)中包版本的一致性。
composer list:獲取幫助信息; 
composer init:以交互方式填寫composer.json文件信息
composer install:從當(dāng)前目錄讀取composer.json文件,處理依賴關(guān)系,并安裝到vendor目錄下;
composer update:獲取依賴的最新版本,升級(jí)composer.lock文件;
composer require:添加新的依賴包到composer.json文件中并執(zhí)行更新; 
composer remove twbs/bootstrap; 卸載依賴包 
composer search:搜索依賴包; 
composer show:列舉所有可用的資源包; 
composer validate:檢測(cè)composer.json文件是否有效;
composer self-update:將composer工具更新到最新版本; 
composer self-update -r :回滾到安裝的上一個(gè)版本 
composer diagnose:執(zhí)行診斷命令 
composer clear:清除緩存 
create-project:基于composer創(chuàng)建一個(gè)新的項(xiàng)目;
composer dump-autoload:在添加新的類和目錄映射是更新autoloader

composer.lock中存有的包版本記錄相當(dāng)于執(zhí)行 composer require packageName:versionNo,不存有的相當(dāng)于執(zhí)行composer update packageName with versionRule in composer.json。

當(dāng)我們協(xié)同開發(fā)時(shí),A 在本地安裝了新的依賴包,或者更新了依賴包,會(huì)寫入 composer.lock/composer.json,A 上傳至倉(cāng)庫(kù),B 拉取至本地后,應(yīng)執(zhí)行一次 composer install來同步團(tuán)隊(duì)的版本變更。

提示

注意:每次更新完composer.json后,必須執(zhí)行composer update后才會(huì)生效。

4. aotuload加載優(yōu)化

composer autoload 慢的主要原因在于來自對(duì) PSR-0 和 PSR-4 的支持,加載器得到一個(gè)類名時(shí)需要到文件系統(tǒng)里查找對(duì)應(yīng)的類文件位置,這導(dǎo)致了很大的性能損耗,當(dāng)然這在我們開發(fā)時(shí)還是有用的,這樣我們添加的新的類文件就能即時(shí)生效。 但是在生產(chǎn)模式下,我們想要最快的找到這些類文件,并加載他們。


composer dump-autoload -o (-o 等同于 --optimize)

這個(gè)命令的本質(zhì)是將 PSR-4/PSR-0 的規(guī)則轉(zhuǎn)化為了 classmap 的規(guī)則, 因?yàn)?classmap 中包含了所有類名與類文件路徑的對(duì)應(yīng)關(guān)系,所以加載器不再需要到文件系統(tǒng)中查找文件了??梢詮?classmap 中直接找到類文件的路徑。

這個(gè)命令并沒有考慮到當(dāng)在 classmap 中找不到目標(biāo)類時(shí)的情況,當(dāng)加載器找不到目標(biāo)類時(shí),仍舊會(huì)根據(jù)PSR-4/PSR-0 的規(guī)則去文件系統(tǒng)中查找;


composer dump-autoload -a (-a 等同于 --classmap-authoritative)

執(zhí)行這個(gè)命令隱含的也執(zhí)行了 Level-1 的命令, 即同樣也是生成了 classmap,區(qū)別在于當(dāng)加載器在 classmap 中找不到目標(biāo)類時(shí),不會(huì)再去文件系統(tǒng)中查找(即隱含的認(rèn)為 classmap 中就是所有合法的類,不會(huì)有其他的類了,除非法調(diào)用);如果項(xiàng)目在運(yùn)行時(shí)會(huì)生成類,使用這個(gè)優(yōu)化策略會(huì)找不到這些新生成的類。


composer dump-autoload --apcu

apcu 可以理解為一塊內(nèi)存,并且可以在多進(jìn)程中共享。
這種策略是為了在 Level-1 中 classmap 中找不到目標(biāo)類時(shí),將在文件系統(tǒng)中找到的結(jié)果存儲(chǔ)到共享內(nèi)存中, 當(dāng)下次再查找時(shí)就可以從內(nèi)存中直接返回,不用再去文件系統(tǒng)中再次查找。

在生產(chǎn)環(huán)境下,這個(gè)策略一般也會(huì)與 Level-1 一起使用, 執(zhí)行composer dump-autoload -o --apcu, 這樣,即使生產(chǎn)環(huán)境下生成了新的類,只需要文件系統(tǒng)中查找一次即可被緩存 , 彌補(bǔ)了Level-2/A 的缺陷。

要根據(jù)自己項(xiàng)目的實(shí)際情況來選擇策略,如果你的項(xiàng)目在運(yùn)行時(shí)不會(huì)生成類文件并且需要 composer 的 autoload 去加載,那么使用 Level-2/A 即可,否則使用 Level-1 及 Level-2/B是比較好的選擇。

  • Level-2的優(yōu)化基本都是 Level-1 優(yōu)化的補(bǔ)充,Level-2/A 主要是決定在 classmap 中找不到目標(biāo)類時(shí)是否繼續(xù)找下去的問題,Level-2/B
  • 主要是在提供了一個(gè)緩存機(jī)制,將在 classmap 中找不到時(shí),將從文件系統(tǒng)中找到的文件路徑緩存起來,加速后續(xù)查找的速度。
  • 在執(zhí)行了 Level-2/A 時(shí),表示在 classmap 中找不到不會(huì)繼續(xù)找,此時(shí) Level-2/B 是不會(huì)生效的。
  • 不論那種情況都建議要開啟 opcache, 這會(huì)極大的提高類的加載速度,性能提升至少 10倍。
  • 提示
  • php5.5 以后的版本中默認(rèn)自帶了 opcache ,開啟opcache , 這樣會(huì)極大的加速類的加載。
  • 參考資料:
  • https://blog.csdn.net/zhouyuqi1/article/details/81098650

5. composer.json詳解

  • name,必選屬性,表示包的名稱,由作者名稱和項(xiàng)目名稱組成,使用 / 分割,包名稱可以包含任何字符,包括空格,并且不區(qū)分大小
  • description,必選屬性,表示包的簡(jiǎn)短描述,通常這是一行介紹就行。
  • version,非必選屬性,表示包的版本,版本的格式必須遵循 X.Y.Z 或 vX.Y.Z,可選后綴 -dev, -patch ( -p ), -alpha ( -a ), -beta ( -b ) 或 -RC, patch, alpha , beta 和 RC 后綴也可以跟一個(gè)數(shù)字。
  • type,非必須屬性,表示包的類型,默認(rèn)為庫(kù) library,Composer 原生支持以下4種類型:library: 默認(rèn)類型,它只需要將文件復(fù)制到 vendor 目錄。project: 當(dāng)前包是一個(gè)項(xiàng)目,而不是一個(gè)庫(kù)。例如Yii框架中的composer.json文件的type值就是project;metapackage: 包含需求并將觸發(fā)其安裝的空包,但不包含文件,并且不會(huì)向系統(tǒng)寫入任何內(nèi)容。因此這種安裝類型并不需要一個(gè) dist 或 source。composer-plugin: 一個(gè)安裝類型為 composer-plugin 的包,它有一個(gè)自定義安裝類型,可以為其它包提供一個(gè) installler,我們也可以定義一個(gè)自定義類型。
  • keywords,非必須屬性,表示一組用于搜索與篩選的與包相關(guān)的關(guān)鍵字
  • homepage,非必須屬性,表示項(xiàng)目網(wǎng)站的 URL 地址
  • readme,非必須屬性,表示README 文檔的絕對(duì)路徑
  • time,非必須屬性,表示包的版本發(fā)布時(shí)間,必須是 YYYY-MM-DD 或者 YYYY-MM-DD HH:MM:SS 格式
  • license,表示包的許可證,可以是一個(gè)字符串或者是一個(gè)字符串?dāng)?shù)組
  • authors,非必須屬性,表示包的作者,這是一個(gè)對(duì)象數(shù)組。
  • support,非必須屬性,表示獲取對(duì)項(xiàng)目支持的信息對(duì)象。
  • require,必選屬性,表示必須安裝的依賴包列表,這些包必須滿足條件,否則不會(huì)安裝
  • require-dev,非必選屬性,表示開發(fā)或運(yùn)行測(cè)試時(shí)的依賴包列表。
  • autoload,表示PHP 自動(dòng)加載的映射,支持 PSR-4 和 PSR-0 自動(dòng)加載,class 映射 和 files 引用。推薦使用 PSR-4 規(guī)范(添加類時(shí),無(wú)需重新生成自動(dòng)加載映射)
  • repositories,非必選屬性,表示使用自定義的安裝源,Composer 默認(rèn)只使用 packagist 的安裝源。通過定義 repositories 你可以從任何其他地方獲取包;
  • config,非必選屬性,表示一組配置選項(xiàng)。
  • scripts,非必選屬性,表示Composer 允許再安裝過程的各個(gè)部分中執(zhí)行腳本。
  • extra,非必選屬性,表示scripts 使用的任意擴(kuò)展數(shù)據(jù)

4. composer自動(dòng)加載的過程

  • vendor/autoload.php 自動(dòng)加載入口文件
  • vendor/composer/autoload_real.php 自動(dòng)加載核心文件
  • vendor/composer/ClassLoader.php 自動(dòng)加載類具體實(shí)現(xiàn)文件
  • vendor/composer/autoload_static.php 所有的自動(dòng)加載配置
  • vendor/composer/autoload_classmap.php classmap自動(dòng)加載配置
  • vendor/composer/autoload_namespaces.php PSR0自動(dòng)加載配置
  • vendor/composer/autoload_psr4.php PSR4自動(dòng)加載配置
  • vendor/composer/autoload_files.php files自動(dòng)加載配置

5.創(chuàng)建自己的composer包


composer init

創(chuàng)建并配置好自己包之后,到https://packagist.org/上傳即可。

prs-4規(guī)范

在PSR-4里邊需要定義一個(gè)命名空間前綴到路徑的映射(相對(duì)于包的根目錄),如果命名空間前綴Foo\指向一個(gè)文件目錄src/,當(dāng)自動(dòng)加載一個(gè)類時(shí),比如Foo\Bar\Baz類,那么這個(gè)類的路徑為 src/Bar/Baz.php,命名空間前綴可以不在路徑之中。在composer.json中的命名空間必須以\結(jié)尾,以避免名字沖突

如果想要明確的指定,在每次請(qǐng)求時(shí)都要載入某些文件,那么你可以使用 files autoloading,通常作為函數(shù)庫(kù)的載入方式(而非類庫(kù))。files引用的所有集合都會(huì)在install/update過程中生成,并存儲(chǔ)到vendor/composer/autoload_files.php文件中。


"autoload": {
     "psr-4": {
          "Nicen\\LocalImage\\": "src/"
     },
     "psr-0": {
            "Tutsplus\\Library": "src"
     },     
    "files": [
         "src/auto.php"
     ]
},

每次修改composer.json之后,都需要update一次;(composer dump-autoload 命令可創(chuàng)建必要的自動(dòng)加載器文件)

PSR-0 是 PHP-FIG 組推薦的自動(dòng)加載標(biāo)準(zhǔn)。在 PSR-0 標(biāo)準(zhǔn)中,您必須使用命名空間來定義您的庫(kù)。完全限定的類名必須反映\\(\)*結(jié)構(gòu)。此外,您的類必須保存在遵循與命名空間相同的目錄結(jié)構(gòu)的文件中。

在 PSR-0 自動(dòng)加載中,您需要將命名空間映射到目錄。在上面的例子中,我們告訴 Composer 任何以Tutsplus\Library命名空間開頭的東西都應(yīng)該在src\Tutsplus\Library目錄中可用。

贈(zèng)人玫瑰,手有余香


請(qǐng)登錄后查看

小碼二開 最后編輯于2024-05-21 16:05:39

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點(diǎn)贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無(wú)簡(jiǎn)介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
2453
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見問題 產(chǎn)品動(dòng)態(tài) 精選推薦 首頁(yè)頭條 首頁(yè)動(dòng)態(tài) 首頁(yè)推薦
取 消 確 定
回復(fù)
回復(fù)
問題:
問題自動(dòng)獲取的帖子內(nèi)容,不準(zhǔn)確時(shí)需要手動(dòng)修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請(qǐng)輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊(cè)

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

{{codeText}}
切換微信登錄/注冊(cè)
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服