PHP 开发的实践标准:PSR-4

2017-03-09

自动加载器

  • 规范藐视了一个标准的自动加载器策略。

自动加载器策略是指,在运行时按需查找 PHP 类,接口或性状,并将其载入 PHP 解释器。支持 PDR-4 的 PHP 组建和矿建,使用同一个自动加载器就能找到相关代码,然后将其载入 PHP 解释器。把 PHP 生态系统中可互相操作的组建联系起来了。

  • 不需要改变代码的实现方式,只建议如何使用文件系统目录结构和 PHP 命名空间组织代码。
  • PSR-4 把命名空间的前缀和文件系统中的目录对应起来,依赖 PHP 命名空间和文件系统目录结构查找并加载 PHP 类,接口,性状。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
/**
* 一个项目专用的自动加载器
* 使用

*/
spl_autoload_register(function ($class) {

//这个项目的命名空间前缀
$prefix = 'Foo\\Bar\\';

//这个命名空间前缀对应的基目录
$base_dir = __DIR__ . '/src/';

//参数传入的类使用这个命名空间前缀么?
$len = strlen($prefix);

if(strncmp($prefix, $class, $len) !== 0){
//不一样就不使用,交给注册的下一个自动加载器处理
return;
}

//获取去掉前缀后的类名
$relative_class = substr($class, $len);

//把命名空间前缀替换成基目录,
//在去掉前缀的类名中,把命名空间分隔符替换成目录分隔符
//在后面加上 .php
$file = $baser_dir . str_replace('\\', '/', $relative_class) . '.php';

if(file_exits($file)){
require $file;
}
});
  • 当然我们可以使用 Composer 自动生成的 PSR-4 自动加载器。