二、五套 PHP非官方规范
PSR-0 (Autoloading Standard) 自动加载标准
PSR-1 (Basic Coding Standard) 基础编码标准
PSR-2 (Coding Style Guide) 编码风格向导
PSR-3 (Logger Interface) 日志接口
PSR-4 (Improved Autoloading) 自动加载优化标准
二、自动加载
对于第三方包的自动加载,Composer提供了四种方式的支持:
PSR-0 、PSR-4 的自动加载,生成class-map,和直接包含files 的方式。
①、PSR-4 方式
该方式是 composer 推荐使用的一种方式,因为它更易使用并能带来更简洁的目录结构。在 composer.json 里是这样进行配置的:
{
"autoload": {
"psr-4": {
"Foo\\": "src/",
}
}
}
key 和 value 就定义出了 namespace 以及到相应 path 的映射。按照 PSR-4 的规则,当试图自动加载 “Foo\Bar\Baz” 这个 class时,会去寻找 “src/Bar/Baz.php” 这个文件,如果它存在则进行加载。
注意, “Foo\”并没有出现在文件路径中,这是与 PSR-0 不同的一点,如果 PSR-0 有此配置,那么会去寻找 ”src/Foo/Bar/Baz.php” 这个文件。另外注意 PSR-4 和 PSR-0 的配置里,”Foo\” 结尾的命名空间分隔符必须加上并且进行转义,以防出现 ”Foo” 匹配到了 ”FooBar” 这样的意外发生。在 composer 安装或更新完之后,psr-4 的配置换被转换成 namespace 为 key,dir path 为 value 的Map 的形式,并写入生成的 vendor/composer/autoload_psr4.php 文件之中。
②、PSR-0方式
{
"autoload": {
"psr-0": {
"Foo\\": "src/",
}
}
}
这个配置也以 Map 的形式写入生成的 vendor/composer/autoload_namespaces.php 文件之中。
③、Class-map 方式
通过配置指定的目录或文件,然后在 Composer 安装或更新时,它会扫描指定目录下以 .php 或 .inc 结尾的文件中的class,生成class 到指定 file path 的映射,并加入新生成的 vendor/composer/autoload_classmap.php 文件中(前提是目录和文件已经存在,否则 composer 在扫描时会报错)
{
"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 文件中,以供autoloader 直接进行加载。