SplObserverオブザーバモード
2261 ワード
実は観察者モードこれは比較的理解しやすいモードであるでしょう.それはイベントシステムであり、あるクラスが別のクラスの状態を観察することを可能にし、観察されたクラスの状態が変化したとき、観察クラスは通知を受け、相応の動作を行うことができることを意味します.例えばキーボード、私が叩くと、システムは通知を受け取り、対応する応答を行います.
PHPにとって、PHP内蔵は、外部アプリケーション領域がこのモードを実現するために2つのインタフェースを提供する.
SplSubjectインタフェースは、観察されたオブジェクトを表し、その構造は次のとおりです.
SplObserverインタフェースは、観察者として機能するオブジェクトを表し、その構造は次のとおりです.
このモードはこのように実現される.SplSubjectは特定の状態を維持し、この状態が変化するとnotify()で前にattachでSplSubjectに登録されたすべてのSplObserverに通知し、対応するupdateメソッドを呼び出す.
簡単な例:
PHPにとって、PHP内蔵は、外部アプリケーション領域がこのモードを実現するために2つのインタフェースを提供する.
SplSubjectインタフェースは、観察されたオブジェクトを表し、その構造は次のとおりです.
interface SplSubject{
public function attach(SplObserver $observer);
public function detach(SplObserver $observer);
public function notify();
}
SplObserverインタフェースは、観察者として機能するオブジェクトを表し、その構造は次のとおりです.
interface SplObserver{
public function update(SplSubject $subject);
}
このモードはこのように実現される.SplSubjectは特定の状態を維持し、この状態が変化するとnotify()で前にattachでSplSubjectに登録されたすべてのSplObserverに通知し、対応するupdateメソッドを呼び出す.
簡単な例:
class subject 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]);
}
}
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;
}
}
class observer implements SplObserver{
public function update(SplSubject $subject){
echo ‘The new state of subject’.$subject->getValue();
}
}
$subject = new subject();
$observer = new observer();
$subject->attach($observer);
$subject->setValue(5);//observer update , The new state of subject 5