//被观察方 Class userRegisterSplSubject implements SplSubject{ private $observers = []; public $user = null; public function __construct($name) { //注册user $user = new stdClass(); $user->id = 1; $user->name = $name; $user->phone = '188888888';
$this->user = $user; }
public function attach (SplObserver $observer) { $id = spl_object_hash($observer); $this->observers[$id] = $observer; }
public function detach (SplObserver $observer) { $id = spl_object_hash($observer); if (isset($this->observers[$id])) { unset($this->observers[$id]); } }
public function notify () { foreach($this->observers as $ob) { $ob->update($this); } } }
//邮件观察 Class sendMail implements SplObserver{ public function update(SplSubject $subject) { //发送邮件 echo "正在给{$subject->user->name}发送邮件\n"; } }
//优惠券观察 Class sendCoupon implements SplObserver{ public function update(SplSubject $subject) { //赠送优惠券 echo "正在给{$subject->user->name}赠送优惠券\n"; } }
//通知观察者 $userRegisterSubject = new userRegisterSplSubject('韩'); $userRegisterSubject->attach(new sendMail()); $userRegisterSubject->attach(new sendCoupon()); $userRegisterSubject->notify();