本文目录导读:

在 PHP 面试或技术交流中介绍架构,关键不是背诵概念,而是展示分层思维、职责划分和可扩展性,以下是一套从宏观到微观、从传统到现代的完整介绍框架。
开篇定调(30秒)
“PHP 架构的核心思想是 ‘关注点分离’ 和 ‘分层解耦’,无论是传统的 MVC 还是现代的微服务,本质上都是在管理复杂性,让代码可维护、可测试、可扩展。”
核心架构层次(由外到内)
表现层(Presentation Layer)
- 职责:渲染视图、接收用户输入
- 工具:
Blade、Twig、纯 PHP 模板 - 关键原则:不写业务逻辑,只做数据展示
// 传统方式
require 'views/user/index.php';
// Laravel 方式
return view('users.index', compact('users'));
应用层(Application Layer)
- 职责:业务编排、事务管理、权限控制
- 组件:
Controller、Middleware、Service - 关键模式:Command 模式、Mediator 模式
class UserController extends Controller
{
public function store(CreateUserRequest $request)
{
$this->dispatcher->dispatch(new CreateUserCommand($request->validated()));
}
}
领域层(Domain Layer)
- 职责:核心业务规则、实体状态管理
- 组件:
Entity、Value Object、Domain Service、Repository接口 - 关键原则:依赖倒置——不依赖具体数据库
interface UserRepository
{
public function findById(int $id): ?User;
}
基础设施层(Infrastructure Layer)
- 职责:数据库、缓存、队列、外部 API 的具体实现
- 组件:
Eloquent、Redis、RabbitMQ、HTTP 客户端
两种典型架构风格
传统单体 MVC(适用于 60% 的中小型项目)
Request → Router → Middleware → Controller → Service → Model → DB
↑ |
└────────────── Response ←────────────────────┘
优缺点:
- ✅ 简单、开发快、部署单一
- ❌ 扩展瓶颈出现在业务量上升时
模块化单体 + DDD(适用于中大型项目)
app/
├── Modules/
│ ├── User/
│ │ ├── Application/
│ │ ├── Domain/
│ │ └── Infrastructure/
│ └── Order/
核心优势:边界清晰,为将来拆分微服务打基础。
关键技术组件设计
路由与中间件(Pipeline 设计模式)
$pipeline->pipe(new AuthenticateMiddleware())
->pipe(new ValidateInputMiddleware())
->pipe(new RateLimitMiddleware());
依赖注入容器
- 作用:管理对象生命周期、解耦依赖
- 实现:服务容器 + 反射自动解析
服务提供者(Service Provider)
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(UserRepository::class, EloquentUserRepository::class);
}
}
事件驱动机制
- 用于解耦模块间通信
- 示例:用户注册成功后触发
SendWelcomeMail监听器
高性能架构策略
| 技术点 | 方案 | 适用场景 |
|---|---|---|
| 缓存 | Redis + 查询缓存 + 页面片段缓存 | 高读取场景 |
| 异步队列 | RabbitMQ / Redis Queue | 邮件发送、报表生成 |
| 数据库优化 | 读写分离、分库分表 | 数据量大 |
| 高性能运行 | PHP-FPM 调优、OPcache、Swoole | 高并发 |
| 横向扩展 | 无状态 API + 负载均衡 | 多服务器 |
一个完整的演示案例
某电商系统的订单创建流程架构:
用户请求 → Nginx → PHP-FPM → Router
↓
中间件:Auth / Validation / XSS 过滤
↓
Controller(应用层)
↓
OrderService(领域层)
├── 验证库存(调用 ProductService)
├── 创建订单实体
├── 计算总价
├── 扣减库存(事务)
├── 发送事件 OrderCreated
└── 异步推送:发邮件 / 生成发票
↓
Repository → MySQL(主库)
↓
返回响应 JSON / 渲染视图
架构演进路线图
面试亮点(突出思考):
第一阶段:所有代码在 index.php 里
第二阶段:简单 MVC(Controller 越写越厚)
第三阶段:Service 层 + Repository 层
第四阶段:模块化 + DDD 分层
第五阶段:API 层独立 + 多前端适配
第六阶段:微服务或 Service Mesh
面试回答技巧
- 先画图 —— 展示架构图比纯文字强 10 倍
- 结合例子 —— 用一个具体业务逻辑串联全流程
- 选择性深入 —— 选 1-2 个你最熟悉的组件深讲
- 表达观点 —— 说明每种架构的取舍
💡 重点话术:“架构不是越复杂越好,而是要匹配业务阶段,我理解架构是为业务服务的,当业务复杂度上升时,架构也需要有节奏地演进。”
推荐工具与前沿方向
- PHP 8.2+ 新特性(枚举、只读类、不可变数组)
- Swoole / Hyperf 协程框架
- Symfony 7 企业级组件库
- DDD + CQRS 模式
- API Platform 自动化 REST API
如果你能把这个框架讲清楚,配合具体的业务场景或项目经历,完全可以在面试中展现出架构思维与工程化素养。