public function __construct() { $subject = new Subject(); $o1 = new Observer1(); $o2 = new Observer2(); $o3 = new Observer3(); $subject->setData('Data for each 3 attached observers!'); $subject->attach($o1); $subject->attach($o2); $subject->attach($o3); $subject->notify(); $subject->detach($o3); $subject->setData('Data not for 3rd detached one!'); $subject->notify(); }
{ protected $observers = array(); public function attach(SplObserver $observer) { $this->observers[] = $observer; } public function detach(SplObserver $observer) { $key = array_search($observer, $this->observers); if ($key) { unset($this->observers[$key]); } } public function notify() { foreach ($this->observers as $observer) { $observer->update($this); } } } class MyObserver implements SplObserver { public function update(SplSubject $subject) { echo "I was updated by " . get_class($subject); } } $subject = new Subject(); $subject->attach(new MyObserver()); $subject->notify(); // prints "I was updated by Subject"