PHP のオブザーバー設計パターンの実装は比較的単純ですが、PHP5+ バージョンにはすでに標準ライブラリがサポートされており、それを単純に継承して実装するだけで済みます。
Observer: 標準インターフェイス クラス ライブラリ SplSubject を実装します。 1 つの登録方法: アタッチ、1 つの登録解除方法: デタッチ。通知方法:nofity。
<?phpclass TSPLSubject implements SplSubject{ private $observers, $value; public function __construct(){ $this->observers =array(); } public function attach(SplObserver $observer){ $this->observers[] = $observer; } public function detach(SplObserver $observer){ if($idx = array_search($observer, $this->observers,true)) { unset($this->observers[$idx]); } } /** * * Notify observers one by one (main entry) * * @param none * @return none */ public function notify(){ foreach($this->observers as $observer){ $observer->update($this); } } public function setValue($value){ $this->value = $value; //$this->notify(); } public function getValue(){ return $this->value; }}
<?phpclass TSPLObserver implements SplObserver{ public function update(SplSubject $subject){ echo 'The new state of subject ' , nl2br("\r\n");// echo 'The new state of subject '.$subject->getValue(); }}
<?phpclass TSPLObserver1 implements SplObserver{ public function update(SplSubject $subject){ echo 'The new state of subject one ' , nl2br("\r\n");// echo 'The new state of subject '.$subject->getValue(); }}
テスト呼び出し (同じディレクトリ内):
& & GT; サブジェクトの新しい状態 & LT;
サブジェクトの新しい状態1 つ