name = $name; } function register($listener) { if (!is_object($listener) || !is_a($listener, 'Observer')) return; foreach ($this->_listeners as $el) if ($el === $listener) return; $this->_listeners[] =& $listener; } function _notify($event) { foreach ($this->_listeners as $el) $el->notify($event); } function setName($name) { $this->name = $name; $this->_notify('name'); } } Class Observer { var $name; function Observer($name) { $this->__uniqid = uniqid(rand(), true); $this->name = $name; } function notify($event) { echo "Je m'appelle ".$this->name." et le nom de l'objet observé a changé\n"; } } $observable = new Observable('toto'); echo $observable->name."\n"; $obs1 =& new Observer('obs1'); $obs2 =& new Observer('obs2'); $observable->register($obs1); $observable->register($obs1); $observable->register($obs2); $observable->register($observable); $observable->setName('titi'); echo $observable->name."\n"; ?>