ホームページ  >  に質問  >  本文

PHP でのオブザーバー パターンの実装

// 実装機能: ログイン時にセキュリティモジュールと広告モジュールに通知

#// 定義済みインターフェース: 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- >ログイン ();

只是没有如果只是没有如果2165日前1065

全員に返信(0)返信します

応答なし
  • キャンセル返事