Suite à cette source :
http://www.phpcs.com/codes/PROGRAMMATION-EVENEMENTIELLE-PHP_41477.aspx
que j'ai trouvée très intéressante, j'ai poussé un peu les recherches.
J'ai appliqué l'observer design pattern (une recherche sur google vous en expliquera les tenants et les aboutissants) afin d'obtenir un package simple et facile à mettre en oeuvre permettant d'exécuter en cascade toute une série de traitements lors du déclenchement d'un évènement (côté serveur, on parle ici de programmation évènementielle côté serveur).
Il y a 2 fichiers, un pour les versions de PHP5 >= 5.1 (redéfinissant quand même certaines classes SPL au cas où), et une pour PHP5 < 5.1.
Les différences résident dans le typage forcé de l'appel de certaines méthodes, et dans l'ajout d'une petite exception dans la méthode SplSubject::notify().
J'ai aussi dans les deux versions modifié la méthode SplObjectStorage::rewind(), simplement parce sur PHp5.0.4 ça ne passait pas. Bref...vous rentrerez dans les détails si vous le voulez.
Le principe :
on a des observateurs, et un sujet observé. On lie au sujet observé des observateurs via un collecteur d'objets (ça, c'est pour facilité la mise ne place) : SplObjecStorage.
A chaque changement d'état important, les observateurs liés sont alertés via un appel à SplSubject::notify().
Ils réagissent en fonction de ce qu'ils doivent faire, simplement.
J'ai repris l'analogie de la voiture et du dépassement de la vitesse autorisée.
L'avantage ici est de pouvoir déclencher autant de traitements qu'on le veut sur 1 seul changement d'état. CX'est un peu le principe des triggers en SQL.