interface IObserver{
public function update($data);
}
class LogObserver implements IObserver{
public function update($data){
echo 'ログ出力を行いました。(ダミー)'.$data['date1'].'<br>';
}
}
class MailObserver implements IObserver{
public function update($data){
echo 'メール送信を行いました。(ダミー)'.$data['date1'].'<br>';
}
}
class TwitterObserver implements IObserver{
public function update($data){
echo 'Twitterへ投稿しました。(ダミー)'.$data['date1'].'<br>';
}
}
class SubjectBase{
public $observers = array();
public function addObserver(IObserver $observer){
$this->observers[] = $observer;
}
public function notifyObservers($data){
for($i=0; $i<count($this->observers); $i++){
$observer = $this->observers[$i];
$observer->update($data);
}
}
}
class AnimalSubject extends SubjectBase{
public function __construct(){
$this->addObserver(new LogObserver());
$this->addObserver(new MailObserver());
$this->addObserver(new TwitterObserver());
}
public function action(){
$data = array('date1' => date('Y-m-d H:i:s'));
$this->notifyObservers($data);
}
}
// 検証
$animal = new AnimalSubject();
$animal->action();
出力
ログ出力を行いました。(ダミー)2024-11-23 21:43:42