PHP Écouteur d'Événement de meilleures pratiques de mise en œuvre
Je suis en train de créer un CMS comme système en PHP. ce qui le rend aussi modulaire et extensible que possible.
Quelqu'un pourrait-il m'offrir la meilleure pratique de scénario de la création d'un écouteur d'événement système en PHP (une version très simplifiée de Drupal système par exemple), la création de crochets et de les mettre en œuvre dans un court exemple serait aussi agréable.
- Cela pourrait être d'intérêt pour vous: components.symfony-project.org/event-dispatcher
Vous devez vous connecter pour publier un commentaire.
Bien, il n'y a vraiment trois façons différentes de le faire à partir d'une perspective de mise en œuvre (à noter que ces OO sont des modèles de conception, mais vous pourriez les mettre en œuvre fonctionnelle ou de la procédure si vous voulais).
1. Modèle Observateur
Vous pouvez mettre en œuvre la Modèle Observateur. Fondamentalement, vous auriez chaque chose qui peut déclencher des événements plus être un sujet. Puis les classes/code que vous voulez écouter de la lie ce qu'elle veut écouter de la en particulier. Donc, disons que vous avez un contrôleur appelé
Foo
. Si vous voulais l'écouter, on pourrait appeler$fooController->attach($observer);
. Ensuite, chaque fois que le contrôleur voulait dire quelque chose, elle distribue l'événement à tous les observateurs.C'est vraiment bien adapté pour un système de notification (pour prolonger ce que les classes sont en train de faire). Ce n'est pas aussi bien adapté à la modification du comportement de code en temps réel.
2. Décorateur Modèle
Vous pouvez également mettre en œuvre les Décorateur Modèle. Fondamentalement, vous prenez l'objet que vous souhaitez modifier, et "enveloppe" dans un nouvel objet qui fait ce que vous voulez changer. C'est vraiment bien adapté pour la modification et l'extension du comportement (puisque vous pouvez choisir de remplacer la fonctionnalité de la enveloppé de classe).
Cela fonctionne très bien si vous avez des interfaces définies et s'attendre à des objets pour les rendre conformes à eux. Si vous n'avez pas d'interfaces (ou de ne pas les utiliser correctement), la plupart de ce qui le décorateur modèle peut faire pour vous sera perdu.
Notez également que ce n'est vraiment pas une façon de faire les événements, c'est une façon de modifier le comportement des objets.
3. Médiateur Modèle
Vous pouvez également utiliser un Médiateur. Fondamentalement, vous auriez un médiateur qui conserve la trace de vos auditeurs. Lorsque vous voulez déclencher un événement, vous pouvez envoyer l'événement pour le médiateur. Le médiateur peut garder la trace de qui l'écoute objets souhaitez recevoir cet événement, et de passer le message correctement.
Cela a l'avantage d'être central. Sens de plusieurs expéditeurs pouvez envoyer le même événement, et pour les auditeurs, il n'est pas de faire une différence qui l'a envoyé...
J'ai développé ce sujet dans un billet de blog.
C'est la façon dont je l'ai fait dans un certain nombre de projets
Tous les objets sont créés avec une fonction constructeur au lieu de
new
opérateur.cela a de nombreux avantages par rapport à raw
new
, à partir d'une gestion des événements de point de vue, il est important que_new()
maintient une liste de tous les objets créés.Il y a aussi une fonction globale
send($message, $params)
qui itère si cette liste et, si un objet expose une méthode "on_$message", les appels à cette méthode, en passant params:Ainsi, par exemple,
send('load')
appelleraon_load
méthode pour chaque objet qui l'a défini.Si vous utilisez PHP 5.3 (et ainsi avoir accès à de riches fermetures), l'événement/filtres de système de Lithium est ce que j'avais à utiliser comme base pour AOP conception en PHP.