我需要在我自己的代码库(自定义PHP库)中集成一个事件分派器,所以我查看了Symfony2和Zend Framework 2都在做什么。
显然,分派事件没有共享接口,因为两个框架有不同的需求,并决定实现自己的代码…所以我有点迷茫,我不想重新发明自己的轮子。
可能用于实现观察者模式的SPL接口有点幼稚,所以我在这里问你:你会怎么做?编辑
既然不清楚……我想重用现有的ED,让开发人员将其注入到我的库中。
假设你开发了一个带有调度程序的库,你知道你的库将成为Symfony Bundle的一部分,并在ZF项目中重用:你肯定想重用Symfony和ZF的调度程序,而不是你自己的。
因此,我一直在寻找主流库中实现的现有调度程序的共享接口,但听起来似乎没有解决方案。
您可以根据需要定义一个接口,然后为每个框架使用不同的适配器来实现它。
我想你的第一反应是选择一个广泛使用的组件是正确的。
这两个也是我也会考虑的选择。你应该简单地看一下它们,然后选择一个你觉得最适合你的。
无耻的插头:如果你想要一些非常非常轻的东西,你可以看看Événement.
您需要通过实现PHP接口SplObserver, SplSubject来实现观察者模式。不仅是Zend, Symphony也这样做来支持钩子,通常每个事件调度程序都是通过实现观察者模式来实现的。
这是一篇了解更多的文章http://devzone.zend.com/article/4284
已经被接受的旧帖子,但是对于那些遇到这种情况的人来说,PHP中的EDP解决方案有一个解决方案。
http://prggmr.org该功能与Symfony和Zend的实现有很大的不同,因为它们不需要扩展接口或类来使用库,而只需调用典型的php函数来处理事件调度。
// Subscribe to dispatched events
subscribe(callback, signal)
// Dispatch an event
fire(signal)