下面由composer使用教程欄目為大家講解composer系列之a(chǎn)utoload文件,希望對(duì)需要的朋友有所幫助!
簡(jiǎn)介
composer使用教程是 php 的一個(gè)依賴管理工具。它允許你申明項(xiàng)目所依賴的代碼庫(kù),它會(huì)在你的項(xiàng)目中為你安裝他們。
對(duì)于類庫(kù)的自動(dòng)加載,composer 生成了一個(gè) vendor/autoload.php 文件。引入這個(gè)文件,就能得到一個(gè)免費(fèi)的自動(dòng)加載支持,這種感覺真是棒極了~
本文主要是介紹如何利用 Composer 自帶的自動(dòng)加載機(jī)制,加載本地自定義的包(即不是來(lái)自于 packagist)。
使用
在 composer.json 文件中的 autoload 字段中添加自己的 autoloader。
目前 Composer 支持四種自動(dòng)加載映射的方式:
PSR-0?autoloading PSR-4?autoloading classmap?generation files
下面只介紹 PSR-4,為什么?因?yàn)樗銐蚍奖愫糜茫ó?dāng)你添加類時(shí)不需要重新生成 autoloader)。詳細(xì)請(qǐng)查看 composer使用教程。
PSR-4(推薦)
{ ????"autoload":?{ ????????"psr-4":?{ ????????????"First":?"src/", ????????????"Temp":?"lib/" ????????} ????} }
上面的代碼采用 PSR-4 規(guī)范,該規(guī)范包含了 PHP 最新的自動(dòng)加載標(biāo)準(zhǔn),它要求必須使用 Namespace (命名空間)的方式。
First 表示命名空間,必須以 結(jié)尾,避免相似的命名空間導(dǎo)致沖突,若包含子命名空間,可以這樣表示:FirstSecond。
src/ 表示命名空間所在目錄為與 Composer 的 vendor 目錄同級(jí)的 src 目錄,如下所示:
First/ |---examples/ ????|---get.php |---src/ ????|---cURL.php |---vendor/ ????|---composer/ ????|---autoload.php |---composer.json
如果需要在多個(gè)目錄下搜索相同的命名前綴,可以用一個(gè)數(shù)組提供:
{ ????"autoload":?{ ????????"psr-4":?{"First":?["src/",?"lib/"]} ????} }
修改完 composer.json 的 autoload 字段后需要更新一下 Composer 的自動(dòng)加載類:
composer?dumpautoload?-o
對(duì)應(yīng) Curl.php 的命名空間如下表示:
<?php namespace First; class Curl { }
引用 Curl.php 的方式如下:
<?php require '../vendor/autoload.php'; use FirstCurl; $curl = new Curl(); ... ...
小結(jié)
之前一直以為 namespace 是 PHP 內(nèi)置好的,只需要在某個(gè)類上聲明一下某個(gè)命名空間,在調(diào)用這個(gè)類的地方 use 一下就好。。。
直到前幾天脫離框架,單獨(dú)寫了幾個(gè)類,然后被 xxx class not found 錯(cuò)誤折磨到懷疑人生,才明白需要有個(gè) autoloader 才行。
題外話
現(xiàn)在 Composer 已經(jīng)成為 PHP 的依賴管理標(biāo)桿,多利用這個(gè)工具為自己的開發(fā)帶來(lái)方便。
框架能大大減少開發(fā)成本,但有時(shí)候不利于個(gè)人技術(shù)的提升。在使用熱門框架時(shí),多看看框架的代碼,不僅幫助自己理解掌握框架,也能帶來(lái)許多編程思想和技術(shù)上的提高。