PSR-4 做的事只有一件:把一个命名空间前缀绑定到一个目录,然后把前缀后面那部分中的反斜杠替换成斜杠,末尾补上 .php,拼出来的就是类文件的路径。类名和文件名里的字母大小写必须一致,下划线没有特殊含义。
用 Composer 时,配置写法如下:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
这样一来,App\Service\Mailer 这个类就落在 src/Service/Mailer.php:
<?php
// src/Service/Mailer.php
namespace App\Service;
class Mailer
{
public function send(): string
{
return 'ok';
}
}
即使不使用 Composer,也可以自己注册一个加载器:
spl_autoload_register(function ($class) {
$prefix = 'App\\'; // 命名空间前缀
$baseDir = __DIR__ . '/src/'; // 前缀对应的目录
if (strncmp($class, $prefix, strlen($prefix)) !== 0) {
return; // 不是这个前缀的类就跳过
}
$relative = substr($class, strlen($prefix));
$file = $baseDir . str_replace('\\', '/', $relative) . '.php';
if (is_file($file)) {
require $file;
}
});