// 実装機能: ログイン時にセキュリティモジュールと広告モジュールに通知
#// 定義済みインターフェース: 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- >ログイン ();