<?php
// Example implementation of Observer design pattern:
class MyObserver1 implements SplObserver {
public function update(SplSubject $subject) {
echo __CLASS__ . ' - ' . $subject->getName();
}
}
class MyObserver2 implements SplObserver {
public function update(SplSubject $subject) {
echo __CLASS__ . ' - ' . $subject->getName();
}
}
class MySubject implements SplSubject {
private $_observers;
private $_name;
public function __construct($name) {
$this->_observers = new SplObjectStorage();
$this->_name = $name;
}
public function attach(SplObserver $observer) {
$this->_observers->attach($observer);
}
public function detach(SplObserver $observer) {
$this->_observers->detach($observer);
}
public function notify() {
foreach ($this->_observers as $observer) {
$observer->update($this);
}
}
public function getName() {
return $this->_name;
}
}
$observer1 = new MyObserver1();
$observer2 = new MyObserver2();
$subject = new MySubject("test");
$subject->attach($observer1);
$subject->attach($observer2);
$subject->notify();
/*
will output:
MyObserver1 - test
MyObserver2 - test
*/
$subject->detach($observer2);
$subject->notify();
/*
will output:
MyObserver1 - test
*/
?>
SplSubject インターフェイス
(PHP 5 >= 5.1.0)
導入
SplSubject インターフェイスを SplObserver とともに使うと、Observer パターンを実装することができます。
インターフェイス概要
SplSubject
{
/* メソッド */
}目次
- SplSubject::attach — SplObserver をアタッチする
- SplSubject::detach — observer をデタッチする
- SplSubject::notify — observer に通知する
przemyslaw dot szpiler at gmail dot com
27-Feb-2012 06:54
