interface Observer
{
function update(string $message): void;
}
class HomeOwner implements Observer
{
private string $name;
function __construct(string $name)
{
$this->name = $name;
}
function update(string $message): void
{
echo $this->name . " received message: " . $message . PHP_EOL;
}
}
class Subject
{
private array $observers = [];
function attach(Observer observer): void
{
array_push(this->observers, $observer);
}
function detach(Observer $observer): void
{
observer, this->observers[$index]);
}
function notify(string message): void
{
foreach(this->observers as $observer) {
message);
}
}
}
class SecuritySystem extends Subject
{
function detectIntrusion(): void
{
$this->notify("Intrusion detected!");
}
}
$securitySystem = new SecuritySystem();
bob = new HomeOwner("Bob");
alice);
bob);
$securitySystem->detectIntrusion();
securitySystem->detectIntrusion();
?>