atelierspierrot / event-manager
Les Ateliers Pierrot 的事件管理器软件包。
Requires
- php: >=5.4.0
- atelierspierrot/library: 2.0.0-BETA
- atelierspierrot/patterns: ~1.0.9
Requires (Dev)
- fabpot/php-cs-fixer: @stable
- phpmd/phpmd: @stable
- phpunit/phpunit: @stable
- sami/sami: @stable
This package is not auto-updated.
Last update: 2024-03-02 13:08:27 UTC
README
Les Ateliers Pierrot 的事件管理器软件包
安装
有关如何安装此软件包及其命名空间的完整信息,请参阅我们的 USAGE 文档。
如果您是 Composer 用户,只需将软件包添加到项目 composer.json
清单文件的要求中
"atelierspierrot/event-manager": "dev-master"
您可以使用特定版本或主要版本的最新版本,使用适当的 版本约束。
请注意,此软件包依赖于外部软件 PHP Patterns 和 PHP Library。
SPL 接口
提醒一下,SPL 观察者对象 是
interface SplObserver { abstract public void update ( SplSubject $subject ) } interface SplSubject { abstract public void attach ( SplObserver $observer ) abstract public void detach ( SplObserver $observer ) abstract public void notify ( void ) }
基础知识
PHP 中事件传播系统的基本思想相当简单
- 对象
A
在其生命周期中可以触发一些事件(例如,通知更新); - 对象
B
可以在对象A
触发事件时调整其属性或行为(例如,保留A
的属性的最后值)。
这可以通过一个 观察者/可观察 系统来实现,其中上面的例子中的对象 A
是 可观察的,而 B
是其 观察者。基本上,可观察的 可以被视为上述 SPL 接口中定义的 SplSubject
,而 观察者 可以被视为 SplObserver
。但是,标准系统(SPL 接口)只允许触发一个单独的事件(或由观察者的相同方法处理的多个事件)。我们可以使用事件触发的这些基本定义,但它强制实现者对可观察的可以触发不同事件的情况进行 switch
...
库中的实现已准备好处理多个事件触发,允许观察者定义在事件被触发时应调用的方法。此方法默认为 handleEvent()
。为此,将 SplObserver
接口重命名(并重写)为 ObserverInterface
,将 SplSubject
重命名为 ObservableInterface
。事件是一个独立的对象,实现了 EventInterface
interface ObserverInterface { abstract public void handleEvent ( EventInterface $event ) } interface ObservableInterface { abstract public void attachObserver ( ObserverInterface $observer | array($object , $method) | $callback ) abstract public void detachObserver ( ObserverInterface $observer | array($object , $method) | $callback ) abstract public void triggerEvent ( $event_name ) } interface EventInterface { abstract public ObservableInterface getSubject () abstract public string getName () abstract public void stopPropagation () abstract public bool isPropagationStopped () }
事件管理器
定义了一个内核对象来处理全局应用程序的事件监听器/观察者集合:EventManager
对象。它引入了两个新概念:监听器 和 订阅者。
基本上,一个监听器就像一个观察者,它将自己与触发它要观察的事件的对象相关联,而订阅者并不会将自身与它想要监听的所有事件相关联,而是与全局事件管理器相关联,该管理器会询问它可以监听的事件列表。
interface EventListenerInterface extends ObserverInterface {} interface EventSubscriberInterface { abstract public array getSubscribedEvents () }
作者 & 许可证
事件管理器
版权所有 (c) 2015-2016 Pierre Cassat 及贡献者
根据Apache 2许可证授权。
Les Ateliers Pierrot - 法国巴黎
http://www.ateliers-pierrot.fr/ - contact@ateliers-pierrot.fr