观察者模式是“一对多”依赖关系,被观察者状态改变时自动通知所有观察者更新;PHP通过Observer和Subject接口解耦事件触发与处理,如User类变更邮箱时通知日志、推送、风控等观察者。
观察者模式本质是“一对多”的依赖关系:当一个对象(被观察者)状态改变,所有依赖它的对象(观察者)都会自动收到通知并更新。PHP中不内置该模式,但用接口+类组合就能轻松实现,关键是解耦事件触发和处理逻辑。
先约定契约,让代码更清晰、可扩展:
Observer接口声明每个观察者必须实现的update()方法:
interface Observer {
public function update($data);
}
Subject接口定义被观察者应提供的基础能力:
interface Subject {
public function attach(Observer $observer);
public function detach(Observer $observer);
public function notify();
}
比如User类注册邮箱变更事件,其他模块(如日志、推送、风控)只需作为观察者响应,无需修改User本身:
class User implements Subject {
private $observers = [];
private $email;
public function attach(Observer $observer) {
$this->observers[] = $observer;
}
public function detach(Observer $observer) {
$key = array_search($observer, $this->observers, true);
if ($key !== false) unset($this->observers[$key]);
}
public function notify() {
foreach ($this->observers as $observer) {
$observer->update(['email' => $this->email]);
}
}
public function setEmail($email) {
$this->email = $email;
$this->notify(); // 状态变更后主动广播
}
}
不同业务关心同一事件,各自实现update()即可:
示例:
class EmailLogger implements Observer {
public function update($data) {
error_log("Email changed to: " . $data['email']);
}
}
$user = new User();
$user->attach(new EmailLogger());
$user->attach(new PushService());
$user->setEmail("new@example.com"); // 自动触发全部观察者
PHP没有像Node.js那样的原生事件循环,但观察者模式提供了轻量、可控的事件驱动风格。它适合中小型系统中松耦合的通知场景,比如订单创建后发短信、用户登录后刷新缓存、表单提交后校验权限等。注意避免观察者执行耗时操作阻塞主流程,必要时可异步投递或加队列。
基本上就这些。不复杂但容易忽略——关键在接口抽象和职责分离。
# php
# js
# node.js
# node
# ai
# 邮箱
# 表单提交
# 循环
# 接口
相关文章:
已有域名和空间,如何快速搭建网站?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
,南京靠谱的征婚网站?
七夕网站制作视频,七夕大促活动怎么报名?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
制作宣传网站的软件,小红书可以宣传网站吗?
建站主机无法访问?如何排查域名与服务器问题
,有什么在线背英语单词效率比较高的网站?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星如何快速解决建站难题?
如何快速搭建自助建站会员专属系统?
建站之星客服服务时间及联系方式如何?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
如何在建站之星绑定自定义域名?
如何用y主机助手快速搭建网站?
如何通过VPS建站无需域名直接访问?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
临沂网站制作公司有哪些,临沂第四中学官网?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
如何在新浪SAE免费搭建个人博客?
网站图片在线制作软件,怎么在图片上做链接?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
网页设计网站制作软件,microsoft office哪个可以创建网页?
如何快速辨别茅台真假?关键步骤解析
如何通过免费商城建站系统源码自定义网站主题与功能?
制作电商网页,电商供应链怎么做?
如何快速启动建站代理加盟业务?
如何通过万网虚拟主机快速搭建网站?
如何通过FTP服务器快速搭建网站?
一键网站制作软件,义乌购一件代发流程?
如何通过主机屋免费建站教程十分钟搭建网站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何解决VPS建站LNMP环境配置常见问题?
建站VPS能否同时实现高效与安全翻墙?
历史网站制作软件,华为如何找回被删除的网站?
如何在云虚拟主机上快速搭建个人网站?
装修招标网站设计制作流程,装修招标流程?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何快速上传建站程序避免常见错误?
如何在香港服务器上快速搭建免备案网站?
如何在服务器上配置二级域名建站?
如何零基础在云服务器搭建WordPress站点?
建站之星代理平台如何选择最佳方案?
如何高效利用200m空间完成建站?
家庭建站与云服务器建站,如何选择更优?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。