PHP怎么实现工厂模式_Factory模式编写指南【指南】

张开发
2026/4/19 23:44:13 15 分钟阅读

分享文章

PHP怎么实现工厂模式_Factory模式编写指南【指南】
用静态方法封装对象创建逻辑返回统一接口类型避免散落的new、解耦调用方与具体类适用于构造依赖外部配置或需统一初始化的场景。PHP里怎么写一个能用的工厂类直接给结论用静态方法封装对象创建逻辑别让调用方关心具体类名和构造细节。核心不是“设计模式”这个词而是解决「new 太多、类型分散、改起来牵一发而动全身」的问题。常见错误现象new User()、new Admin()、new Guest() 在控制器里到处出现加个新角色就得翻遍所有 new 地方单元测试时没法轻松替换成 Mock 对象。工厂类本身不继承任何东西也不实现接口——它只是个纯工具类返回类型统一用接口或抽象类比如 UserInterface而不是具体类名避免在工厂里做复杂业务判断比如「根据 IP 地址决定返回哪个用户」——那是策略模式的事工厂只管“造出来”不管“为什么造”如果参数差异大比如有的要传 $id有的要传 $token优先拆成多个静态方法比如 createFromId() 和 createFromToken()别硬塞进一个 create()什么时候该用工厂而不是 new 或 DI 容器不是所有对象创建都适合工厂。关键看「创建逻辑是否稳定」和「调用方是否需要解耦」。使用场景立即学习“PHP免费学习笔记深入”对象构造依赖外部配置比如不同环境用不同缓存驱动但代码里不能写死 new RedisCache()类名可能变化比如从 JsonLogger 换成 SentryLogger但日志接口不变需要统一初始化行为比如每个 Connection 实例都必须调用 connect()别用工厂的情况对象很简单没依赖、没配置、没状态比如 new DateTime()项目已用 DI 容器如 Laravel 的 app()-make() 或 Symfony 的 $container-get()再写一层工厂纯属重复劳动工厂方法里开始做 if-else 类型路由比如 if ($type mysql) { return new MysqlAdapter(); }——这其实是简单工厂的退化该上抽象工厂或策略了静态工厂 vs 抽象工厂PHP 里怎么选PHP 没有接口方法的重载也没办法像 Java 那样靠泛型约束类型所以「抽象工厂」在 PHP 里容易写得笨重又难测。大多数时候静态工厂够用且更直觉。 Fotor AI Image Generator Fotor 平台的 AI 图片生成器

更多文章