// 実装機能: ログイン時にセキュリティモジュールと広告モジュールに通知
#// 定義済みインターフェース: SplObserver オブザーバーと SplSubject オブザーバークラス ユーザーが SplSubject{ protected $login_num;protected $hobby;protected $_subject;public function __construct($login_num, $hobby){$this->login_num = $login_num;$this->hobby = $hobby;//ストレージ オブザーバー オブジェクト $this->_subject = new SplObjectStorage();}public function __get($name){// TODO : __get() メソッドを実装します。return $this->$name;}public function login() {// 操作...$this->notify();}// SplSubject インターフェイスpublic functionattach (SplObserver $observer){// TODO:attach() メソッドを実装します。$this->_subject->attach($observer);}public function detach(SplObserver $observer){// TODO: detach() メソッドを実装します。
$ this->_subject->detach($observer);}public function Notice(){/ / TODO: 実装Notice() メソッド.foreach ($this->_subject as $observer) {$observer->update($this);}}}// オブザーバーはここでユーザーのログインを監視します// セキュリティ チェッククラス セーフは SplObserver
# を実装します##{
public function update(SplSubject $subject)
{
// TODO: update() メソッドを実装します。
if ($subject ->login_num > 10) {
echo '今日は 10 回以上ログインしました。パスワード漏洩の問題がある可能性があります。パスワードをリセットしてください。 ';
} else {
echo 'Today's' . $subject->login_num . '安全にログインしてください! ';
}
}
}
// 広告プロモーション
クラス広告は SplObserver
{
public function update(SplSubject $subject)
{
// TODO: update() メソッドを実装します。
if ($subject->gt;趣味 == 'スポーツ') {
echo 'これはスポーツの広告です! ';
} else {
echo 'ランダムな広告! ';
}
}
}
$趣味 = ['スポーツ'、'食べる'、'飲む'、'寝る'、' play'];
$user = new User(random_int(1, 20), $hobby[shuffle($hobby)]);
$user->attach(新しい安全( ));
$user->attach(new ad());
// ユーザーがログインすると一連のオブザーバーがトリガーされます
$user- >ログイン ();