<?php/**** 被觀察者**/class Subject implements SplSubject {protected $_value;protected $_observers;/*** 建構函式** @return void*/public function __construct() {$this->_observers = new SplObjectStorage();}/*** 追加觀察者* @see SplSubject::attach()*/public function attach(SplObserver $observer) {$this->_observers->attach($observer);}/*** 拋棄觀察者* @see SplSubject::detach()*/public function detach(SplObserver $observer) {$this->_observers->detach($observer);}/*** 通知觀察者* @see SplSubject::notify()*/public function notify() {foreach ($this->_observers as $observer) {$observer->update($this);}}/*** 設定最新值** @param mixed $value* @return*/public function setValue($value) {$this->_value = $value;$this->notify();}/*** 擷取最後更新的值** @return mixed*/public function getValue() {return $this->_value;}}/*** 觀察者**/class Observer implements SplObserver {/\*** @see SplObserver::update()*/public function update(SplSubject $subject) {echo 'i know you '.$subject->getValue();}}header('Content-type:text/html;charset=utf-8');date_default_timezone_set('Asia/Shanghai');error_reporting(E_ALL);$subject = new Subject();$observer = new Observer();$subject->attach($observer);$subject->setValue('updated');
本文出自 “phper” 部落格,請務必保留此出處http://janephp.blog.51cto.com/4439680/1286698