interfaceSubject{publicfunctionregister_observer(Observer$observer);publicfunctionremove_observer(Observer$observer);publicfunctioninform_observers();}classMySubjectimplementsSubject{private$observers=array();private$value;publicfunctionregister_observer(Observer$observer){$this->observers[]=$observer;}publicfunctionremove_observer(Observer$observer){$offset=array_search($observer,$this->observers);unset($this->observers[$offset]);}publicfunctioninform_observers(){foreach($this->observersas$observer){$observer->update($this->value);}}publicfunctionsetValue($value){$this->value=$value;$this->inform_observers();}}interfaceObserver{publicfunctionupdate($value);}classMyObserver1implementsObserver{publicfunction__construct(Subject$subject){$subject->register_observer($this);}publicfunctionupdate($value){print"I'm observer 1 and value is ".$value."\n";}}classMyObserver2implementsObserver{publicfunction__construct(Subject$subject){$subject->register_observer($this);}publicfunctionupdate($value){print"I'm observer 2 and value is ".$value."\n";}}$mySubject=newMySubject();$myObserver1=newMyObserver1($mySubject);$myObserver2=newMyObserver2($mySubject);$mySubject->setValue(1);$mySubject->remove_observer($myObserver1);$mySubject->setValue(2);
I'm observer 1 and value is 1
I'm observer 2 and value is 1
I'm observer 2 and value is 2