欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

PHP 设计模式:观察者模式与事件系统

时间:2026年08月12日 05:38:48 浏览:0

PHP 设计模式:观察者模式与事件系统


观察者模式实现松耦合的事件驱动架构。


1. 基本实现


interface Event {}
interface Listener {
public function handle(Event $event): void;
}

class EventDispatcher {
private array $listeners = [];
public function addListener(string $eventClass, Listener $listener): void {
$this->listeners[$eventClass][] = $listener;
}
public function dispatch(Event $event): void {
$class = get_class($event);
foreach ($this->listeners[$class] ?? [] as $listener) {
$listener->handle($event);
}
}
}

// 事件
class UserRegisteredEvent implements Event {
public function __construct(public string $email) {}
}

// 监听器
class SendWelcomeEmailListener implements Listener {
public function handle(Event $event): void {
echo "发送欢迎邮件到 {$event->email}";
}
}

// 使用
$dispatcher = new EventDispatcher();
$dispatcher->addListener(UserRegisteredEvent::class, new SendWelcomeEmailListener());
$dispatcher->dispatch(new UserRegisteredEvent('user@example.com'));

2. Laravel 事件系统


php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail --event=UserRegistered

EventServiceProvider 注册,然后 event(new UserRegistered($user))


观察者模式让业务逻辑解耦,易于扩展。