<?php
interface Observable
{
	public function attach(Observer $observer): void;
	public function detach(Observer $observer): void;
	public function notify(): void;
}
class Login implements Observable
{
	private array $observers = [];
	public const LOGIN_USER_UNKNOWN = 1;
	public const LOGIN_WRONG_PASS = 2;
	public const LOGIN_ACCESS = 3;
	public function attach(Observer $observer): void
	{
		$this->observers[] = $observer;
	}
	public function detach(Observer $observer): void
	{
		$this->observers = array_filter($this->observers, 
		function ($a) use($observer) {
			return (! ($a === $observer));
		}
		);
	}
	public function notify(): void
	{
		foreach($this->observers as $obs) {
			$obs->update($this);
		}
	}
}
