【问题标题】:What's the best way to integrate an event-dispatcher in a PHP library?将事件调度程序集成到 PHP 库中的最佳方式是什么?
【发布时间】:2011-11-29 13:06:21
【问题描述】:

我需要在我自己的代码库(自定义 PHP 库)中集成一个事件调度程序,所以我查看了 Symfony2Zend Framework 2 都在做什么。

显然,没有用于调度事件的共享接口,因为两个框架有不同的需求并决定实现自己的代码......所以我有点迷茫:我不想重新发明我的个人轮子。

可能实现观察者模式的 SPL 接口有点幼稚,所以我在这里问你:你会怎么做?

编辑

由于不清楚...我想重新使用现有的 ED,让开发人员将其注入我的库中。

假设您使用调度程序开发了一个库,并且您知道您的库将成为 Symfony Bundle 的一部分并在 ZF 项目中重复使用:您肯定想重复使用 Symfony 和 ZF 调度程序,而不是你自己的。

因此,我一直在为主流库中实现的现有调度程序寻找共享接口,但听起来没有解决方案。

【问题讨论】:

    标签: php zend-framework symfony observer-pattern event-dispatching


    【解决方案1】:

    您可以根据需要定义一个接口,然后为每个框架使用不同的适配器来实现它。

    【讨论】:

    • 蹩脚,但目前唯一的选择:)
    • @odino 为什么不开始另一个 PSR 比较 Symfony2、ZF2、Aura、Fuel ......以及还有谁......反正不确定它是否会被接受。可能仅适用于基本接口。
    【解决方案2】:

    我认为选择一个广泛使用的组件是您的第一直觉。

    这两个也是我会考虑的选项。你应该简单地看一下它们,然后选择你认为最适合你的那个。

    无耻插件:如果你想要一些非常非常轻量级的东西,你可以看看Événement

    【讨论】:

      【解决方案3】:

      你需要通过实现 PHP 接口 SplObserver , SplSubject 来实现观察者模式。不仅仅是 Zend,Symphony 这样做是为了支持钩子,而且通常每个事件调度程序都通过实现观察者模式以这种方式工作。

      这里有一篇文章了解更多http://devzone.zend.com/article/4284

      【讨论】:

      • 嗨 OSL,看看编辑,问题的关键不是使用哪种模式,很明显你需要和观察者一起去;-)
      【解决方案4】:

      已被接受的旧帖子,但对于像我一样遇到此问题的人来说,有一个解决方案可以在 PHP 中使用 EDP 解决方案。

      http://prggmr.org

      功能与 Symfony 和 Zend 的实现有很大不同,因为它们没有需要扩展才能使用库的接口或类,而是您只需调用典型的 php 函数来处理事件调度。

      // Subscribe to dispatched events
      subscribe(callback, signal)
      
      // Dispatch an event
      fire(signal)
      

      【讨论】:

        猜你喜欢
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 2020-04-28
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多