관찰자 패턴은 서로 상호 작용하는 둘 이상의 클래스를 포함하는 디자인 패턴의 일반적인 패턴입니다. 이 모드를 사용하면 클래스가 다른 클래스의 상태를 관찰할 수 있으며, 관찰된 클래스의 상태가 변경되면 관찰자에게 이를 알리고 해당 상태를 업데이트합니다.
php의 SPL 표준 클래스 라이브러리는 구현을 위해 SplSubject 및 SplObserver 인터페이스를 제공합니다. 관찰 클래스를 주제라고 하며 관찰을 담당하는 클래스를 관찰자라고 합니다. 이 모드는 SplSubject 클래스가 특정 상태를 유지하는 모드입니다.
이 상태가 변경되면 알림 메소드가 호출됩니다. 알림 메소드가 호출되면 이전에 Attach 메소드를 사용하여 등록된 모든 SplObserver 인스턴스의 업데이트 메소드가 호출됩니다.
DemoSubject 클래스는 SplSubject를 구현합니다.{
비공개 $관찰자, $value;
공개 함수 __construct(){
$this->observers = array();
}
공용 함수 연결(SplObserver $observer){
$this->observers[] = $observer;
}
공용 함수 분리(SplObserver $observer){
If($idx = array_search($observer, $this->observers, true)){
unset($this->observers[$idx]);
}
}
공개 함수 알림(){
foreach($this->관찰자는 $observer로){
$observer->update($this);
}
}
공개 함수 setValue($value){
$this->값 = $값;
$this->notify();
}
공개 함수 getValue(){
$this->값 반환
}
}
DemoObserver 클래스는 SplObserver를 구현합니다.{
공개 기능 업데이트(SplSubject $subject){
echo '새 값은 '입니다. $subject->getValue();
}
}
$subject = 새로운 DemoSubject();
$observer = 새로운 DemoObserver();
$subject->attach($observer);
$subject->setValue(5);