用静态方法封装对象创建逻辑,返回统一接口类型,避免散落的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 图片生成器
相关推荐
swordbob3 分钟前
mysql数据库,明明有索引为啥不用2603_965148116 分钟前
eBay商品数据API:寻找海外仓与价格洼地2601_9563198814 分钟前
TqSdk Tick 数据适合做什么?获取方法与使用边界晴天¥1 小时前
Oracle ASM、ACFS、FLEX ASM三者之间的关系?苏灿烤鱼1 小时前
把 Agent 做成一家公司,真比通用提示词好用吗?Leon-Ning Liu1 小时前
Oracle GoldenGate Replicat Abend:Key Column Missing 根因分析与修复北斗落凡尘10 小时前
LangGraph 入门实战(2)IvorySQL10 小时前
PostgreSQL 日报 | JOIN 与外键优化(8 月 9 日)ltl11 小时前
自治数据库十年回顾:Peloton、NoisePage、OtterTune 到云原生 auto-tuning