成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

composer 自動(dòng)加載

alighters / 1281人閱讀

摘要:自動(dòng)加載是指在代碼中,不需要顯式地使用文件路徑將類(lèi)庫(kù)文件包含進(jìn)來(lái),便可使用該文件中定義的類(lèi)庫(kù)。在里是這樣進(jìn)行配置的按照的規(guī)則,當(dāng)試圖自動(dòng)加載這個(gè)時(shí),會(huì)去尋找這個(gè)文件。最后,只要在項(xiàng)目中你所需要的所有類(lèi)庫(kù)都會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)載入。

Composer是PHP中用來(lái)管理依賴(lài)(dependency)關(guān)系的工具。你可以在自己的項(xiàng)目中聲明所依賴(lài)的外部工具庫(kù)(libraries),Composer會(huì)幫你安裝這些依賴(lài)的庫(kù)文件。

自動(dòng)加載是指在代碼中,不需要顯式地使用文件路徑將類(lèi)庫(kù)文件包含進(jìn)來(lái),便可使用該文件中定義的類(lèi)庫(kù)。

PHP的自動(dòng)加載機(jī)制

PHP的自動(dòng)加載可以使用__autoload()和spl_autoload_register()兩種機(jī)制,但后一種為主流,原因是:

__autoload()是全局唯一的,如果框架占了這個(gè)名字,便會(huì)導(dǎo)致框架的用戶(hù)用不了其它的__autoload()了,包括用戶(hù)自定義的和其它類(lèi)庫(kù)帶的。spl_autoload_register()可以注冊(cè)多個(gè)autoload方法,不存在這個(gè)問(wèn)題。

__autoload()是一個(gè)函數(shù),在實(shí)際使用中,開(kāi)發(fā)者勢(shì)必要賦予它一些變量(例如class path和class_name => file_path mapping數(shù)組)。這就只能靠全局變量了,使用全局變量可不是好的編碼習(xí)慣。spl_autoload_register()可以將一個(gè)Class的某個(gè)方法注冊(cè)為autoload函數(shù),如Symfony的spl_autoload_register(array(self::getInstance(), "autoload"));

Composer的自動(dòng)加載方式

Composer提供了四種自動(dòng)加載的方式,分別是PSR-0、PSR-4、生成classmap以及直接包含files。

提到psr-0和psr-4就不得不先了解命名空間,命名空間的詳細(xì)介紹詳見(jiàn)底部《PHP手冊(cè):命名空間》[[1]](#php-namespace)。

psr-0方式,要求目錄名稱(chēng)和命名空間層層對(duì)應(yīng),會(huì)導(dǎo)致目錄結(jié)構(gòu)容易變得比較深。雖然已被官方廢棄,但因?yàn)橹髁骺蚣芏家褜?shí)現(xiàn)psr-0,因此composer仍然使用psr-0來(lái)向下兼容。

    "autoload": {
         "psr-0": {
             "Foo": "src/",
         }
    }

按照PSR-0的規(guī)則,當(dāng)試圖自動(dòng)加載 "FooBarBaz" 這個(gè)class時(shí),那么會(huì)去尋找"src/Foo/Bar/Baz.php",最終這個(gè)配置也以Map的形式寫(xiě)入生成的vendor/composer/autoload_namespaces.php

psr-4方式,是composer推薦使用的一種方式,也是psr-0的替代方案,因?yàn)樗资褂貌⒛軒?lái)更簡(jiǎn)潔的目錄結(jié)構(gòu)。在composer.json里是這樣進(jìn)行配置的

    "autoload": {
        "psr-4": {
            "Foo": "src/",
        }
    }

按照PSR-4的規(guī)則,當(dāng)試圖自動(dòng)加載 "FooBarBaz" 這個(gè)class時(shí),會(huì)去尋找 "src/Bar/Baz.php" 這個(gè)文件。psr-4的配置換會(huì)被轉(zhuǎn)換成namespace為key,dir path為value的Map的形式,并寫(xiě)入生成的 vendor/composer/autoload_psr4.php 文件之中

另外注意PSR-4和PSR-0的配置里,"Foo"結(jié)尾的命名空間分隔符必須加上并且進(jìn)行轉(zhuǎn)義,以防出現(xiàn)"Foo"匹配到了"FooBar"這樣的意外發(fā)生。

classmap方式,則是通過(guò)配置指定的目錄或文件,然后在Composer安裝或更新時(shí),它會(huì)掃描指定目錄下以.php或.inc結(jié)尾的文件中的class,生成class到指定file path的映射,并加入新生成的 vendor/composer/autoload_classmap.php 文件中。

    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }

例如src/下有一個(gè)BaseController類(lèi),那么在autoload_classmap.php文件中,就會(huì)生成這樣的配置:
"BaseController" => $baseDir . "/src/BaseController.php"

files方式,就是手動(dòng)指定供直接加載的文件。比如說(shuō)我們有一系列全局的helper functions,可以放到一個(gè)helper文件里然后直接進(jìn)行加載

    "autoload": {
         "files": ["src/MyLibrary/functions.php"]
    }

它會(huì)生成一個(gè)array,包含這些配置中指定的files,再寫(xiě)入新生成的
vendor/composer/autoload_files.php

在composer.json配置完成之后,來(lái)到terminal執(zhí)行
composer install
執(zhí)行成功之后,composer就會(huì)幫你將加載機(jī)制創(chuàng)建完備,會(huì)得到一個(gè)vendor文件夾。

最后,只要在項(xiàng)目中
require "vendor/autoload.php";
你所需要的所有類(lèi)庫(kù)都會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)載入。

參考資料

《PHP手冊(cè):命名空間》http://php.net/language.names...
《PHP手冊(cè):自動(dòng)加載類(lèi)》http://php.net/manual/zh/lang...
《細(xì)說(shuō)“PHP類(lèi)庫(kù)自動(dòng)加載”》https://github.com/qinjx/adv_...
《composer設(shè)計(jì)原理及用法》http://blog.turn.tw/?p=1039
《composer進(jìn)階原理:PHP命名空間與PSR-0》http://blog.turn.tw/?p=1122
《PHP管理依賴(lài)關(guān)系工具Composer的自動(dòng)加載》http://www.jb51.net/article/5...

原文鏈接:https://macken.me/article/composer-autoload

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21879.html

相關(guān)文章

  • PHP包管理工具--Composer自動(dòng)加載

    摘要:接觸過(guò)的同學(xué)都知道使用作為項(xiàng)目的包管理工具但是并不是獨(dú)有的是的包管理工具這兩者的關(guān)系就像于于一樣但是發(fā)現(xiàn)真正項(xiàng)目中使用還是比較少的所以這里這里寫(xiě)一遍文章介紹的使用幫助那些對(duì)于還是有點(diǎn)模糊的同學(xué)此文跟沒(méi)有任何聯(lián)系安裝的方式就不講了具體安裝方式 接觸過(guò)Laravel的同學(xué)都知道,Laravel使用Composer作為項(xiàng)目的包管理工具.但是Composer并不是Laravel獨(dú)有的,Comp...

    xiaoqibTn 評(píng)論0 收藏0
  • php-composer的安裝與使用方法(簡(jiǎn)化版)

    摘要:中文網(wǎng)系統(tǒng)要求運(yùn)行需要以上版本。注中的路徑為相對(duì)于的路徑這個(gè)時(shí)候,你就可以調(diào)用你自己編寫(xiě)的函數(shù)庫(kù)或者類(lèi)庫(kù)了注本文內(nèi)容參考了中文網(wǎng),后續(xù)還會(huì)更新其它的實(shí)用功能 1.簡(jiǎn)介 Composer 是 PHP 的一個(gè)依賴(lài)管理工具。它允許你申明項(xiàng)目所依賴(lài)的代碼庫(kù),它會(huì)在你的項(xiàng)目中為你安裝他們?!禖omposer 中文網(wǎng)》 2.系統(tǒng)要求 運(yùn)行 Composer 需要 PHP 5.3.2+ 以上版本。C...

    mikasa 評(píng)論0 收藏0
  • thinkphp源碼分析(三)—自動(dòng)加載篇(Loader的分析)

    摘要:源碼分析自動(dòng)加載系統(tǒng)會(huì)調(diào)用方法注冊(cè)自動(dòng)加載,在這一步完成后,所有符合規(guī)范的類(lèi)庫(kù)包括依賴(lài)加載的第三方類(lèi)庫(kù)都將自動(dòng)加載。是通過(guò)加載對(duì)應(yīng)的文件進(jìn)行注冊(cè)加載的。 源碼分析 自動(dòng)加載 系統(tǒng)會(huì)調(diào)用 Loader::register()方法注冊(cè)自動(dòng)加載,在這一步完成后,所有符合規(guī)范的類(lèi)庫(kù)(包括Composer依賴(lài)加載的第三方類(lèi)庫(kù))都將自動(dòng)加載。 系統(tǒng)的自動(dòng)加載由下面主要部分組成: 1. 注冊(cè)系統(tǒng)的自...

    Pandaaa 評(píng)論0 收藏0
  • php管理依賴(lài)關(guān)系工具composer學(xué)習(xí)筆記

    摘要:首先支持下黃老師的視頻網(wǎng)站轉(zhuǎn)型這篇的學(xué)習(xí)筆記也是根據(jù)他的視頻教程寫(xiě)的,一共十集,講解的很簡(jiǎn)單感興趣的同志們可以上他視頻網(wǎng)站購(gòu)買(mǎi)視頻,網(wǎng)站地址放在文末我的博客作用自動(dòng)安裝所需要的模塊,自動(dòng)加載管理項(xiàng)目,發(fā)布到網(wǎng)上上去是默認(rèn)的加載組件地址安裝下 首先支持下黃老師的視頻網(wǎng)站轉(zhuǎn)型這篇composer的學(xué)習(xí)筆記也是根據(jù)他的視頻教程寫(xiě)的,一共十集,講解的很簡(jiǎn)單感興趣的同志們可以上他視頻網(wǎng)站購(gòu)買(mǎi)視頻...

    CoyPan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<