摘要:自動加載是指在代碼中,不需要顯式地使用文件路徑將類庫文件包含進來,便可使用該文件中定義的類庫。在里是這樣進行配置的按照的規則,當試圖自動加載這個時,會去尋找這個文件。最后,只要在項目中你所需要的所有類庫都會在適當的時候自動載入。
PHP的自動加載機制Composer是PHP中用來管理依賴(dependency)關系的工具。你可以在自己的項目中聲明所依賴的外部工具庫(libraries),Composer會幫你安裝這些依賴的庫文件。
自動加載是指在代碼中,不需要顯式地使用文件路徑將類庫文件包含進來,便可使用該文件中定義的類庫。
PHP的自動加載可以使用__autoload()和spl_autoload_register()兩種機制,但后一種為主流,原因是:
__autoload()是全局唯一的,如果框架占了這個名字,便會導致框架的用戶用不了其它的__autoload()了,包括用戶自定義的和其它類庫帶的。spl_autoload_register()可以注冊多個autoload方法,不存在這個問題。
__autoload()是一個函數,在實際使用中,開發者勢必要賦予它一些變量(例如class path和class_name => file_path mapping數組)。這就只能靠全局變量了,使用全局變量可不是好的編碼習慣。spl_autoload_register()可以將一個Class的某個方法注冊為autoload函數,如Symfony的spl_autoload_register(array(self::getInstance(), "autoload"));
Composer的自動加載方式Composer提供了四種自動加載的方式,分別是PSR-0、PSR-4、生成classmap以及直接包含files。
提到psr-0和psr-4就不得不先了解命名空間,命名空間的詳細介紹詳見底部《PHP手冊:命名空間》[[1]](#php-namespace)。
psr-0方式,要求目錄名稱和命名空間層層對應,會導致目錄結構容易變得比較深。雖然已被官方廢棄,但因為主流框架都已實現psr-0,因此composer仍然使用psr-0來向下兼容。
"autoload": { "psr-0": { "Foo": "src/", } }
按照PSR-0的規則,當試圖自動加載 "FooBarBaz" 這個class時,那么會去尋找"src/Foo/Bar/Baz.php",最終這個配置也以Map的形式寫入生成的vendor/composer/autoload_namespaces.php
psr-4方式,是composer推薦使用的一種方式,也是psr-0的替代方案,因為它更易使用并能帶來更簡潔的目錄結構。在composer.json里是這樣進行配置的
"autoload": { "psr-4": { "Foo": "src/", } }
按照PSR-4的規則,當試圖自動加載 "FooBarBaz" 這個class時,會去尋找 "src/Bar/Baz.php" 這個文件。psr-4的配置換會被轉換成namespace為key,dir path為value的Map的形式,并寫入生成的 vendor/composer/autoload_psr4.php 文件之中
另外注意PSR-4和PSR-0的配置里,"Foo"結尾的命名空間分隔符必須加上并且進行轉義,以防出現"Foo"匹配到了"FooBar"這樣的意外發生。
classmap方式,則是通過配置指定的目錄或文件,然后在Composer安裝或更新時,它會掃描指定目錄下以.php或.inc結尾的文件中的class,生成class到指定file path的映射,并加入新生成的 vendor/composer/autoload_classmap.php 文件中。
"autoload": { "classmap": ["src/", "lib/", "Something.php"] }
例如src/下有一個BaseController類,那么在autoload_classmap.php文件中,就會生成這樣的配置:
"BaseController" => $baseDir . "/src/BaseController.php"
files方式,就是手動指定供直接加載的文件。比如說我們有一系列全局的helper functions,可以放到一個helper文件里然后直接進行加載
"autoload": { "files": ["src/MyLibrary/functions.php"] }
它會生成一個array,包含這些配置中指定的files,再寫入新生成的
vendor/composer/autoload_files.php
在composer.json配置完成之后,來到terminal執行
composer install
執行成功之后,composer就會幫你將加載機制創建完備,會得到一個vendor文件夾。
最后,只要在項目中
require "vendor/autoload.php";
你所需要的所有類庫都會在適當的時候自動載入。
《PHP手冊:命名空間》http://php.net/language.names...
《PHP手冊:自動加載類》http://php.net/manual/zh/lang...
《細說“PHP類庫自動加載”》https://github.com/qinjx/adv_...
《composer設計原理及用法》http://blog.turn.tw/?p=1039
《composer進階原理:PHP命名空間與PSR-0》http://blog.turn.tw/?p=1122
《PHP管理依賴關系工具Composer的自動加載》http://www.jb51.net/article/5...
原文鏈接:https://macken.me/article/composer-autoload
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21879.html
摘要:接觸過的同學都知道使用作為項目的包管理工具但是并不是獨有的是的包管理工具這兩者的關系就像于于一樣但是發現真正項目中使用還是比較少的所以這里這里寫一遍文章介紹的使用幫助那些對于還是有點模糊的同學此文跟沒有任何聯系安裝的方式就不講了具體安裝方式 接觸過Laravel的同學都知道,Laravel使用Composer作為項目的包管理工具.但是Composer并不是Laravel獨有的,Comp...
摘要:中文網系統要求運行需要以上版本。注中的路徑為相對于的路徑這個時候,你就可以調用你自己編寫的函數庫或者類庫了注本文內容參考了中文網,后續還會更新其它的實用功能 1.簡介 Composer 是 PHP 的一個依賴管理工具。它允許你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。《Composer 中文網》 2.系統要求 運行 Composer 需要 PHP 5.3.2+ 以上版本。C...
摘要:源碼分析自動加載系統會調用方法注冊自動加載,在這一步完成后,所有符合規范的類庫包括依賴加載的第三方類庫都將自動加載。是通過加載對應的文件進行注冊加載的。 源碼分析 自動加載 系統會調用 Loader::register()方法注冊自動加載,在這一步完成后,所有符合規范的類庫(包括Composer依賴加載的第三方類庫)都將自動加載。 系統的自動加載由下面主要部分組成: 1. 注冊系統的自...
摘要:首先支持下黃老師的視頻網站轉型這篇的學習筆記也是根據他的視頻教程寫的,一共十集,講解的很簡單感興趣的同志們可以上他視頻網站購買視頻,網站地址放在文末我的博客作用自動安裝所需要的模塊,自動加載管理項目,發布到網上上去是默認的加載組件地址安裝下 首先支持下黃老師的視頻網站轉型這篇composer的學習筆記也是根據他的視頻教程寫的,一共十集,講解的很簡單感興趣的同志們可以上他視頻網站購買視頻...
閱讀 3981·2021-11-22 15:31
閱讀 2518·2021-11-18 13:20
閱讀 3098·2021-11-15 11:37
閱讀 6959·2021-09-22 15:59
閱讀 736·2021-09-13 10:27
閱讀 3767·2021-09-09 09:33
閱讀 1435·2019-08-30 15:53
閱讀 2562·2019-08-29 15:37