首先呢,一般的框架都会通过某种机制自动解析namespace
,比如Yii
里,最底层的namespace
是app
,所有的Class
都是在这个app
之下的。
或者,Laravel
框架里,什么都是在Illuminate
这个namespace
之下。
那么,如果想手动添加属于自己的namespace
怎么办?
比如我写了一个库,我想把这个库的namespace
命名为SuperPHP
,咋办?
也不难,composer.json
这个文件里有一个autoload
,可以用来创建自己的namespace
并且自动加载到整个框架里,使得任何地方都可以使用到你自己写的库。
{
"autoload": {
"psr-4": {
"MyNamespce\\": "dirPath/"
}
}
}
注意,大小写是区分的,并且psr-4
里边,key
是namespace
,value
是文件路径
。
最后,用一个命令重新生成新的自动加载文件(autoloader files
):
composer dump-autoload --optimize
摘抄自composer
的文档:
--optimize (-o): Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default.
2018年7月7日更新
autoload
里还有一个东西,就是files
,目的是在每一个request的时候都加载该文件,一般用于加载一些Helpers
函数。
"files": [
"src/Helpers.php"
]
2018年11月19日更新
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
每次更新这个classmap
这个,都要重新生成新的自动加载文件(autoloader files
):
composer dump-autoload --optimize