mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-07-04 23:23:37 +02:00
49 lines
1.0 KiB
PHP
49 lines
1.0 KiB
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;
|
|
private $email;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->observers = new SplObjectStorage();
|
|
}
|
|
|
|
public function attach(SplObserver $observer): void
|
|
{
|
|
$this->observers->attach($observer);
|
|
}
|
|
|
|
public function detach(SplObserver $observer): void
|
|
{
|
|
$this->observers->detach($observer);
|
|
}
|
|
|
|
public function changeEmail(string $email): void
|
|
{
|
|
$this->email = $email;
|
|
$this->notify();
|
|
}
|
|
|
|
public function notify(): void
|
|
{
|
|
/** @var SplObserver $observer */
|
|
foreach ($this->observers as $observer) {
|
|
$observer->update($this);
|
|
}
|
|
}
|
|
}
|