1.非限定名稱或不包含前綴的類名稱.
如 $a = new foo();
若是當前命名空間是 app,則 foo 爲appfoo
若是當前沒有命名空間,代碼是全局的.則 foo 被解析爲全局 foophp
2.限定名稱或包含前綴的名稱.
如 $a = new userfoo();
若是當前命名空間爲 app,則 foo 被解析爲 appuserfoo();
若是使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,foo 會被解析爲 userfoo。redis
3.徹底限定名稱
如 $a = new userfoo();
在這種狀況下,foo 就是 userfoo();json
訪問任意全局類、函數或常量,均可以使用徹底限定名稱,例如 strlen() 或 Exception 或 INI_ALL。app
1.classmap
命名空間和文件路徑的映射composer
{ "autoload": { "classmap": ["src/", "lib/", "Something.php"] } }
它會掃描指定目錄下以. php 或. inc 結尾的文件中的 class,生成 class 到指定 file path 的映射.
並加入新生成的 vendor/composer/autoload_classmap.php 文件中函數
<?php return [ 'App\\Console\\Kernel' => $baseDir . '/app/Console/Kernel.php' ]; ?>
2.filesui
{ "autoload": { "files": ["src/MyLibrary/functions.php"] } }
用於全局性的helper 目錄下函數
它會生成一個 array,包含這些配置中指定的 files,再寫入新生成的 vendor/composer/autoload_files.php 文件中,以供 autoloader 直接進行加載spa
3.psr-4code
"autoload": { "psr-4": { "App\\": "app/" } }
key 和 value 就定義出了 namespace 以及到相應 path 的映射
註冊命名空間到對應的路徑下的 src 目錄下,不指向 src 也能夠.
而後根據命名空間去目錄下尋找文件.
$a = new AppFoo();
會去 app目錄下找 foo.php 文件blog
加入後執行 composer install 或 composer dump-autoload
1.項目目錄
2.composer.json
{ "require": { "predis/predis": "1.1.0" }, "autoload": { "psr-4": { "App\\": "app/", "Third\\":"third/" }, "files":[ "helper/constants.php", "helper/funs.php" ] } }
執行 composer install 或 composer dumpautoload
會在vendor/composer 裏對應的加載方式文件中生成映射
psr-4
return array( 'Third\\' => array($baseDir . '/third'), 'Predis\\' => array($vendorDir . '/predis/predis/src'), 'App\\' => array($baseDir . '/app'), );
files
return array( 'da551be15a8db089a9deb0b11a4f158d' => $baseDir . '/helper/constants.php', 'cebcf5f3197b00af0a0ca1ae69808ce5' => $baseDir . '/helper/funs.php', );
使用,在 index.php 中
require dirname(__FILE__)."/vendor/autoload.php"; echo Predis\Client::VERSION; $app = new App\Pay(); $app->index();