首先呢,一般的框架都会通过某种机制自动解析namespace,比如Yii里,最底层的namespaceapp,所有的Class都是在这个app之下的。

或者,Laravel框架里,什么都是在Illuminate这个namespace之下。

那么,如果想手动添加属于自己的namespace怎么办?

比如我写了一个库,我想把这个库的namespace命名为SuperPHP,咋办?
也不难,composer.json这个文件里有一个autoload,可以用来创建自己的namespace并且自动加载到整个框架里,使得任何地方都可以使用到你自己写的库。

{
    "autoload": {
        "psr-4": {
            "MyNamespce\\": "dirPath/"
        }
    }
}

注意,大小写是区分的,并且psr-4里边,keynamespacevalue文件路径

最后,用一个命令重新生成新的自动加载文件(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

标签: composer, psr-4, autoload, autoloader, namespace, files

添加新评论