4 coisas que você nunca deve fazer ao usar eventos

Nunca misture lógica! eventos de negócios e de baixo nível
Seja consistente!

Nunca termine! código
Esteja vivo!

Nunca jogue! exceção
Fique quieto!

Nunca dependa da ordem ou de outros! em que o manipulador é denominado
Be independent!

O manipulador de cada evento deve ser independente de outros manipuladores registrados para esse evento.

Se você precisar redirecionar ou interromper os eventos, use cadeia de responsabilidade, fila de prioridade, fila ordenada ou algo mais adequado. Ou delegue tais ações a outros serviços que irão executá-las no tempo apropriado.

$redirector = new Redirector;
$object
->event[] = function () use ($redirector) {
$redirector
->redirect('...');
};
// before sending templates
$redirector
->perform();
class Redirector // redirects to url with highest priority
{
private $priority = -1;
private $url = '';
function redirect($url, $priority = 0) {
if ($this->priority > $priority) {
$this
->priority = $priority;
$this
->url = $url;
}
}
function perform() {
if ($this->url !== null) {
header
('Location: ' . $this->url);
die;
}
}
};