mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-02-24 01:32:22 +01:00
45 lines
971 B
PHP
45 lines
971 B
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace DesignPatterns\Behavioral\Observer;
|
|
|
|
use SplSubject;
|
|
use SplObjectStorage;
|
|
use SplObserver;
|
|
|
|
/**
|
|
* User implements the observed object (called Subject), it maintains a list of observers and sends notifications to
|
|
* them in case changes are made on the User object
|
|
*/
|
|
class User implements SplSubject
|
|
{
|
|
private SplObjectStorage $observers;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->observers = new SplObjectStorage();
|
|
}
|
|
|
|
public function attach(SplObserver $observer)
|
|
{
|
|
$this->observers->attach($observer);
|
|
}
|
|
|
|
public function detach(SplObserver $observer)
|
|
{
|
|
$this->observers->detach($observer);
|
|
}
|
|
|
|
public function changeEmail(string $email)
|
|
{
|
|
$this->notify();
|
|
}
|
|
|
|
public function notify()
|
|
{
|
|
/** @var SplObserver $observer */
|
|
foreach ($this->observers as $observer) {
|
|
$observer->update($this);
|
|
}
|
|
}
|
|
}
|