// 구현 기능: 로그인 시 보안 모듈 및 광고 모듈에 알림
// 사전 정의된 인터페이스: SplObserver 관찰자 및 SplSubject 관찰자
class 사용자가 SplSubject
{
protected $login_num;
protected $hobby ;
구현 protected $_subject;
public function __construct($login_num, $hobby)
{
$this->login_num = $login_num;
$this->hobby = $hobby;
// 관찰자 저장 object
$this->_subject = new SplObjectStorage();
}
public 함수 __get($name)
{
// TODO: __get() 메서드를 구현합니다.
return $this -> $name;
}
공용 함수 login()
{
// 작업...
$this->notify();
}
// SplSubject 인터페이스
공용 함수 연결( SplObserver $observer)
{
// TODO: Attach() 메서드를 구현합니다.
$this->_subject->attach($observer);
}
공용 함수 분리(SplObserver $observer)
{
// TODO: detach() 메서드를 구현합니다.
$this->_subject->detach($observer);
}
public 함수 inform()
{
/ / TODO: 통지() 메소드를 구현합니다.
foreach ($this->_subject as $observer) {
$observer->update($this);
}
}
}
// 관찰자가 관찰합니다. 여기에 사용자 로그인
// 보안 검사
class safe는 SplObserver
{
public function update(SplSubject $subject)
{
// TODO: update() 메소드를 구현합니다.
if ($subject- >login_num > 10) {
echo '오늘 10회 이상 로그인하셨습니다. 비밀번호 유출 문제가 발생할 수 있습니다. ';
} else {
echo '오늘' . $subject->login_num '보안 로그인! ';
}
}
}
//광고 프로모션
클래스 광고는 SplObserver
{
public 함수 업데이트(SplSubject $subject)
{
// TODO: update() 메소드 구현 .
if ($subject->hobby == '스포츠') {
echo '스포츠 광고입니다! ';
} else {
echo '무작위 광고! ';
}
}
}
$hobby = ['스포츠', '먹기', '마시기', '잠', '놀이'];
$user = 신규 사용자(random_int(1, 20), $hobby[shuffle($hobby)]);
$user->attach(new safe());
$user->attach(new ad());
// 사용자 로그인
$user->login();