php适配器模式无官方规范但有公认惯例:坚持“不改旧、兼容新、职责单一”,核心是清晰转换接口,封装源类调用逻辑,保持源类原封不动,命名结构需具可读性,本质是薄而透明的协议翻译层。

PHP适配器模式没有强制性的官方规范,但经过多年实践沉淀,已形成一套被广泛接受的使用惯例和最佳实践。核心是“不改旧、兼容新、职责单一”,重点在于接口转换的清晰性与可维护性。
目标接口需明确定义
适配器必须实现一个明确、稳定的目标接口(Target Interface),该接口代表客户端实际需要调用的方法契约。不能直接面向具体类编程,而应面向这个抽象接口。
- 接口方法命名应语义清晰,如
send()、connect()、render(),避免暴露源类内部细节 - 接口应尽量精简,只包含客户端真正依赖的操作,不强加无关行为
- 建议使用
declare(strict_types=1)并配合类型声明,提升接口可靠性
适配器必须封装转换逻辑
适配器不是简单转发,而是承担“翻译”职责:把源类(Adaptee)的调用方式、返回结构、异常处理等,按目标接口要求重新组织。
- 构造方法中注入源对象(推荐组合方式),而非继承源类(PHP不支持多继承,类适配器受限)
- 每个目标接口方法都应有明确的适配逻辑,例如:
EBook::getPage()返回[current, total],而Book::getPage()只需返回current,适配器里要取数组第一项 - 避免在适配器中添加新业务逻辑,它只做协议转换,不做功能增强
源类保持原封不动
适配器存在的前提,是源类不可修改——可能是第三方库、遗留系统或只读SDK。因此所有适配工作必须在适配器内部完成。
- 不得修改源类的代码、方法签名或行为
- 若源类升级导致接口变更,只需更新适配器,不影响客户端调用目标接口的代码
- 适配器可同时适配多个版本的源类(如
LegacyApiV1Adapter和LegacyApiV2Adapter),便于灰度迁移
命名与结构需具可读性
良好的命名能立刻传达意图,降低协作成本。
- 适配器类名建议采用
XxxAdapter格式(如PayPalAdapter、JsonRpcAdapter),避免模糊词如Wrapper或Helper - 文件名与类名严格一致,符合 PSR-4 自动加载规范
- 若适配的是外部 SDK,可在命名中体现来源,如
StripePaymentAdapter - 适配器内不应存在静态方法或全局状态,保持无状态、可实例化
本质上,适配器是一层薄而透明的协议翻译层。写得好,它像空气一样存在感低但不可或缺;写得差,反而成为系统耦合的新源头。关键不在技巧多炫,而在边界是否干净、意图是否一目了然。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











