📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials PHP for Beginners Design Patterns — Observer

Design Patterns — Observer

6 min read
Observer lets objects subscribe to events and react when they fire. A subject notifies all registered listeners when an event happens. This pattern decouples the event source from its handlers for easy extension.

Observer Pattern

interface Observer {
    public function update(string $event, mixed $data): void;
}

class EventEmitter {
    private array $listeners = [];

    public function on(string $event, Observer $observer): void {
        $this->listeners[$event][] = $observer;
    }

    public function emit(string $event, mixed $data = null): void {
        foreach ($this->listeners[$event] ?? [] as $obs) {
            $obs->update($event, $data);
        }
    }
}

class EmailNotifier implements Observer {
    public function update(string $event, mixed $data): void {
        mail($data["email"], "New $event", "...");
    }
}

$emitter = new EventEmitter();
$emitter->on("user.registered", new EmailNotifier());
$emitter->emit("user.registered", ["email" => "a@b.com"]);