PHP观察者模式应以“解耦、可控、可测”为核心,避免使用简陋的SplSubject/SplObserver,推荐手写轻量EventDispatcher类,支持字符串事件名、传参、callable监听器,并注意无副作用、异步处理及按需选型。
PHP中观察者模式的使用规范,核心是“解耦、可控、可测”,不是照搬接口契约,而是围绕业务真实需求设计轻量通知机制。
SPL 提供的 SplSubject 和 SplObserver 接口过于简陋:
notify() 调用时 observer 拿不到事件上下文update() 方法Fatal error: Call to a member function update() on null
建议仅将其作为命名参考,不用于生产逻辑。
一个零依赖、易测试、可复用的轻量实现更符合 PHP 项目实际:
立即学习“PHP免费学习笔记(深入)”;
'user.registered'、'order.paid')callable 即可,无需定义接口或抽象类,降低侵入性观察者逻辑应保持无副作用、不阻塞主流程:
__construct() 中触发通知,确保 observer 已注册完成不必强求统一架构,按需选型:
on_user_login(fn($data) => send_welcome_email($data))
EventDispatcher,配合 PSR-14 兼容接口便于未来升级event() 或 dispatch(new UserRegistered($user)),但注意监听器注册位置和作用域