, , . Observable ( - , , . , , , , Login, , , . Login , .
, , - , :
class Observable {
protected static $event_names = array();
protected $observers = array();
function __construct() {
foreach (static::$event_names as $event_name) {
$this->observers[$event_name] = array();
}
}
function register($event, $object, $handler) {
if (array_key_exists($event, $this->observers)) {
$this->observers[$event][] = array($object, $handler);
} else {
echo "Invalid event \"$event\"!";
}
}
function trigger($event, $data = null) {
foreach ($this->observers[$event] as $observer) {
$observer[0]->$observer[1]($data);
}
}
}
class Login extends Observable {
protected static $event_names = array("userLoggedIn", "userLoggedOut", "userRegistered");
}
:
class SomeListener {
function __construct() {
$login_instance->register("userLoggedIn", $this, "myLoggedInHandler");
}
function myLoggedInHandler($data = null) {
echo "User Logged In.";
}
}
, , , ( , Observable IMO).