我们都知道Composer是现代PHP框架(Yii2、Laravel...)的基石,有了Composer后我们开发是一件多么的爽的事情。那么Composer加载方式你知道多少呢?下面由composer使用教程栏目给大家介绍你不知道的composer加载方式。
本文仅仅关注Composer的自动加载。
我们以Yii2为例,当我们通过Composer生成了一个Yii2程序后,会在vendor下建立一个autoload.php文件,它负责帮我们自动加载vendor内的各种库(yii2核心库也在vendor内,你懂得!)。
而你一定知道Yii2的入口文件index.php有一行。
require(__DIR__ . '/../vendor/autoload.php');
由此可见,Yii2对Composer的友好程度,也难怪~孤木不成林,Yii2也要靠无数个Composer扩展枝干才能变成参天大树。
下面开始正式讲解Composer的autoload,告诉你各式各样扩展安装后,我们并没有使用include / require,那么Composer是如何帮我们找到他们的那?
目前为止,Composer一共支持4种自动加载方式
PSR-0 PSR-4 class-map 直接包含file
这四种方式足以让Composer涵盖地球上所有的PHP第三方扩展库。
PSR是一套PHP开发标准,现在大多数主流框架都在支持,工兵连已经开专题分享PSR干货。
PSR-4
PSR-4是Composer推荐使用的一种方式,因为它更易使用并能带来更简洁的目录结构。在一个扩展的composer.json里是这样进行配置的:
{ "autoload": { "psr-4": { "Foo\\": "src/", } } }
key和value就定义出了namespace以及其对应的目录映射。按照PSR-4的规则,当试图自动加载"Foo\Bar\Baz"类的使用,会去寻找"srcBarBaz.php"这个文件,如果它存在则加载,要注意的是此时"Foo\"并不会出现在文件路径中。
而composer.json这样的配置会被Composer转换成namespace与文件目录的MAP形式,并存在vendor/composer/autoload_psr4.php文件中,所以如果你安装的某个扩展自动加载是PSR-4形式,你可以在autoload_psr4.php找到它的真实路径。
PSR-0
这是一个已经过时的标准,那是在遥远的PHP5.2时代,你我都知道,PHP5.3之后才有了类似namespace这样的高级属性,所以PSR-0更多是考虑
有点蒙圈么?那我们来看代码你就明白了。
{ "autoload": { "psr-0": { "Foo\\": "src/", } } }
我们来分析这个扩展的加载方式,什么是伪namespace那?当我们用这个库的时候
$model = new Foo_Bar_Baz();
对的,PSR-0的时代,有很多以下划线分隔的类名,它代表。。。它代表。。。
src/Foo/Bar/Baz.php
聪明的你一定明白什么是伪namespace了吧,通过命名的下划线来映射目录结构。
哎,那个时代的标准制定者们也真心不容易呀。
Class-map方式
{ "autoload": { "classmap": ["src/", "lib/"] } }
这个加载方式比较容易理解,当Composer开始安装扩展的时候,会根据composer.json里的这个 autoload 告诉的方式classmap,来遍历src、lib目录然后将里面的类文件和其路径一一对应,存放到vendor/composer/autoload_classmap.php内。
例如src/下有一个BaseController类,那么在autoload_classmap.php文件中,就会生成这样的配置:
'BaseController' => $baseDir . '/src/BaseController.php'
若你还不懂,去看看autoload_classmap.php吧。
File方式
有了上面这些加载方式还不够么? 是的,还会有一些供全局使用的比如帮助等这样函数,那么好吧,我们就讲这些文件直接包含进来好了。
{ "autoload": { "files": ["src/MyLibrary/functions.php"] } }
Composer安装扩展后会将其放到
vendor/composer/autoload_files.php
到此刻,世界清静了,Composer可以加载我大PHP世界的各种库,只要你想,就可以自动加载。
以上是你不知道的Composer載入方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

vProcesserazrabotkiveb被固定,мнелостольностьстьс粹餾標д都LeavallySumballanceFriablanceFaumDoptoMatification,Čtookazalovnetakprosto,kakaožidal.posenesko

在開發一個基於Symfony的應用程序時,我遇到了一個棘手的問題:如何有效地驗證JSON數據格式。最初,我嘗試使用手動編寫的驗證代碼,但這不僅複雜,而且容易出錯。經過一番探索,我發現了一個名為ptyhard/json-schema-bundle的Composer包,它為我的項目帶來了極大的便利和效率。

在開發一個電商網站時,我遇到了一個棘手的問題:如何為用戶提供個性化的商品推薦。最初,我嘗試了一些簡單的推薦算法,但效果並不理想,用戶的滿意度也因此受到影響。為了提升推薦系統的精度和效率,我決定採用更專業的解決方案。最終,我通過Composer安裝了andres-montanez/recommendations-bundle,這不僅解決了我的問題,還大大提升了推薦系統的性能。可以通過一下地址學習composer:學習地址

在開發電商平台時,選擇合適的框架和工具至關重要。最近我在嘗試構建一個功能豐富的電商網站時,遇到了一個棘手的問題:如何快速搭建一個可擴展且功能完善的電商平台。我嘗試了多種解決方案,最終選擇了Fecmall的高級項目模板(fecmall/fbbcbase-app-advanced)。通過使用Composer,這個過程變得非常簡單和高效。可以通過以下地址學習Composer:學習地址

在处理一个包含大量Doctrine实体的项目时,我遇到了一个棘手的问题:每次序列化和反序列化实体时,性能变得非常低效,导致系统响应时间显著增加。我尝试了多种优化方法,但效果不佳。幸运的是,通过使用sidus/doctrine-serializer-bundle,我成功地解决了这个问题,显著提升了项目的性能。

在開發Laravel項目時,錯誤日誌的管理是一個非常關鍵的環節。最近,我在項目中遇到了一個問題:如何高效地捕獲和記錄所有類型的錯誤,並確保這些錯誤信息能被及時處理。經過一番研究,我找到了lukeboy25/errorlogger這個包,它通過Composer安裝,能夠極大地簡化錯誤日誌的管理過程。可以通過一下地址學習composer:學習地址

在開發一個Laravel應用時,我遇到了一個常見但棘手的問題:如何提升用戶賬戶的安全性。隨著網絡攻擊的日益複雜,單一的密碼保護已經不足以保障用戶的數據安全。我嘗試了幾種方法,但效果都不盡如人意。最終,我通過Composer安裝了wiebenieuwenhuis/laravel-2fa庫,成功地為我的應用添加了雙因素認證(2FA),大大提升了安全性。

在開發一個網站時,我遇到了一個常見卻棘手的問題:如何準確判斷用戶的訪問設備類型,以及如何快速獲取文件的下載大小。這些功能看似簡單,但實現起來卻需要處理大量的細節和兼容性問題。經過一番探索,我發現了weizhang/utilities這個Composer包,它提供了簡潔而有效的解決方案。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境