There must be an instance of class A before the event, because you must register for this event. An exception would be if you registered a static method.
, User, . () . ActionScript3:
abstract class Dispatcher
{
protected $_listeners = array();
public function addEventListener($type, callable $listener)
{
$this->_listeners[$type][] = $listener;
}
public function dispatchEvent(Event $event)
{
if ($this->hasEventListener($event->getType())) {
$listeners = $this->_listeners[$event->getType()];
foreach ($listeners as $callable) {
call_user_func($callable, $event);
}
}
}
public function hasEventListener($type)
{
return (isset($this->_listeners[$type]));
}
}
:
class User extends Dispatcher
{
function update()
{
$this->dispatchEvent(new Event('User_update'));
}
}
? , A update
.
$classA = new A();
$user = new User();
$user->addEventListener('User_update', array($classA, 'update'));
$user = new User();
$user->addEventListener('User_update', array('A', 'update'));
, .
Event
update
. , Event.