# PHP 命名空间与 Composer 自动加载
类一多,很快会遇到两个问题:同名类冲突,以及不可能每个页面手动 `require` 大量文件。
## 1. 命名空间
```php
namespace App\Models;
class User
{
}
```
另一个模块也可以有:
```php
namespace App\Services;
class User
{
}
```
完整名称分别是:
```text
App\Models\User
App\Services\User
```
## 2. use
```php
use App\Models\User;
$user = new User();
```
`use` 是引用别名,本身不会负责加载文件。
## 3. Composer 自动加载
`composer.json`:
```json
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
```
目录:
```text
src/
├── Models/User.php
└── Services/UserService.php
```
执行:
```bash
composer dump-autoload
```
入口文件:
```php
require __DIR__ . "/vendor/autoload.php";
use App\Models\User;
$user = new User();
```
## 4. PSR-4
简单理解:
```text
App\Models\User
↓
src/Models/User.php
```
命名空间、目录和文件名保持一致,自动加载就非常直观。
## 5. 为什么重要?
当项目有几百个类时,开发者不应该关心“这个类文件在哪里、我要 require 哪个文件”。
这就是 Composer 自动加载的价值。
## 小结
现代 PHP 项目的基础组合通常是:
```text
namespace
use
Composer
PSR-4
autoload
```
- 点赞
- 收藏
- 关注作者
评论(0)