在PHP库中集成事件调度程序的最佳方式是什么?


What's the best way to integrate an event-dispatcher in a PHP library?

我需要在我自己的代码库(自定义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)