Heim > Fragen und Antworten > Hauptteil
// Implementierungsfunktion: Sicherheitsmodul und Werbemodul beim Anmelden benachrichtigen
// Vordefinierte Schnittstelle: SplObserver-Beobachter und SplSubject-Beobachter
Klasse Benutzer implementiert SplSubject
{
protected $login_num;
protected $hobby ;
protected $_subject;
public function __construct($login_num, $hobby)
{
$this->login_num = $login_num;
$this->hobby = $hobby;
// Speichern Sie den Beobachter object
$this->_subject = new SplObjectStorage();
}
public function __get($name)
{
// TODO: __get()-Methode implementieren.
return $this -> $name;
}
public function login()
{
// Operation...
$this->notify();
}
// SplSubject interface
public function attachment( SplObserver $observer)
{
// TODO: Attach()-Methode implementieren.
$this->_subject->attach($observer);
}
public function detach(SplObserver $ Observer)
{
// TODO: Detach()-Methode implementieren.
$this->_subject->detach($observer);
}
public function notify()
{
/ / TODO: Implementieren Sie die Methode notify().
foreach ($this->_subject as $observer) {
$observer->update($this);
}
}
}
// Der Beobachter beobachtet Benutzeranmeldung hier
// Sicherheitsüberprüfung
Klassensicher implementiert SplObserver
{
public function update(SplSubject $subject)
{
// TODO: Update()-Methode implementieren.
if ($subject- >login_num > 10) {
echo 'Sie haben sich heute mehr als 10 Mal angemeldet. Möglicherweise liegt ein Passwortleck vor. ';
} else {
echo 'Heute' . ';
}
}
}
//Werbeförderung
Klassenanzeige implementiert SplObserver
{
public function update(SplSubject $subject)
{
// TODO: Update()-Methode implementieren .
if ($subject->hobby == 'sports') {
echo 'Dies ist eine Sportwerbung! ';
} else {
echo 'Zufällige Anzeige! ';
}
}
}
$hobby = ['sports', 'eat', 'drink', 'sleep', 'play'];
$user = new User(random_int(1, 20), $hobby[shuffle($hobby)]);
$user->attach(new safe());
$user->attach(new ad());
// Benutzeranmeldung Lösen Sie eine Reihe von Beobachtern aus, wenn
$user->login();