// Fonction d'implémentation : Notifier le module de sécurité et le module de publicité lors de la connexion
// Interface prédéfinie : SplObserver observer et SplSubject observer
class L'utilisateur implémente SplSubject
{
protected $login_num;
protected $hobby ;
protected $_subject;
public function __construct($login_num, $hobby)
{
$this->login_num = $login_num;
$this->hobby = $hobby;
// Stocker l'observateur object
$this->_subject = new SplObjectStorage();
}
public function __get($name)
{
// TODO : Implémenter la méthode __get().
return $this -> $name;
}
public function login()
{
// Opération...
$this->notify();
}
// Interface SplSubject
public function attach( SplObserver $observer)
{
// TODO : Implémenter la méthode attach().
$this->_subject->attach($observer);
}
public function detach(SplObserver $observer)
{
// TODO : Implémenter la méthode detach().
$this->_subject->detach($observer);
}
public function notify()
{
/ / TODO : Implémentez la méthode notify().
foreach ($this->_subject as $observer) {
$observer->update($this);
}
}
}
// L'observateur observe connexion de l'utilisateur ici
// Contrôle de sécurité
class safe implémente SplObserver
{
public function update(SplSubject $subject)
{
// TODO : Implémenter la méthode update().
if ($subject- >login_num > 10) {
echo 'Vous vous êtes connecté plus de 10 fois aujourd'hui. Il se peut qu'il y ait un problème de fuite de mot de passe. ';
} else {
echo 'Aujourd'hui' . $subject->login_num 'Connexion sécurisée ! ';
}
}
}
//Promotion publicitaire
class ad implémente SplObserver
{
public function update(SplSubject $subject)
{
// TODO : Implémenter la méthode update() .
if ($subject->hobby == 'sports') {
echo 'Ceci est une annonce sportive ! ';
} else {
echo 'Annonce aléatoire ! ';
}
}
}
$hobby = ['sports', 'manger', 'boire', 'dormir', 'jouer'];
$user = new User(random_int(1, 20), $hobby[shuffle($hobby)]);
$user->attach(new safe());
$user->attach(new ad());
// Connexion utilisateur Déclenchez une série d'observateurs lorsque
$user->login();