phossa / phossa-event
PHP 的事件管理库
1.0.7
2016-05-27 03:38 UTC
Requires
- php: >=5.4.0
- phossa/phossa-shared: >=1.0.8
This package is not auto-updated.
Last update: 2024-09-14 18:47:39 UTC
README
查看新库phoole/event 简介
Phossa-event 是一个 PHP 的事件管理库。它仅从 phossa/phossa-shared
解耦。它只要求 PHP5.4。
安装
通过 composer
工具安装。
composer require "phossa/phossa-event=1.*"
或添加以下行到您的 composer.json
{ "require": { "phossa/phossa-event": "1.*" } }
简单的 EventDispatcher
使用 Phossa\Event\EventDispatcher
进行简单的事件分发
-
简单用法
$dispatcher = new EventDispatcher(); // bind event 'user.login' to a callable $dispatcher->on('user.login', function(Event $evt) { // ... }); // trigger the 'user.login' event, passing data $dispatcher->trigger('user.login', [ 'user' => $user ]);
或使用静态(全局分发)
// bind event with priority 60 (0 - 100, high # higher priority) EventDispatcher::on('user.login', function(Event $evt) { // ... }, 60); // trigger the 'user.login' event EventDispatcher::trigger('user.login', [ 'user' => $user ]);
-
触发有限次
// bind event for once $dispatcher->one('user.login', function(Event $evt) { // ... }); // allow 3 times $dispatcher->many('user.tag', 3, function(Event $evt) { // ... });
-
事件通配符
// globbing $dispatcher->on('user.*', function(Event $evt) { //... });
-
断开事件
// detach $dispatcher->off('user.*');
-
监控 PHP 错误
PHP 错误发生时执行一个可调用的函数。
// callable returns bool $dispatcher->error(function($errno, $errstr, $errfile, $errline) { // ... return true; });
-
脚本结束时执行一个可调用的函数
// run this after script ends $dispatcher->ready(function() { // ... });
完整的 EventManager
使用 Phossa\Event\EventManager
进行复杂的事件管理,全面支持事件监听器、事件主题、本地事件管理器和全局事件管理器等。
-
事件监听器
use Phossa\Event\Interfaces; class MyListener implements Interfaces\EventListenerInteface { /* * Get events and callables MyListener listens to */ public function getEventsListening() { return array( 'eventName1' => 'method1', // method1 of $this 'eventName2' => array('method2', 20), // priority 20 'eventName3' => array( // multiple callables [ 'method3', 70 ], [ 'method4', 50 ] ) ); } } $listener = new MyListener();
-
事件管理器
// create an event manager $evtManager = new Event\EventManager(); // attach a listener object $evtManager->attachListener($listener); // attach a callable directly to 'oneSpecialEvent' $callable = function(Event\Event $evt) { ... }; $evtManager->attachListener($callable, 'oneSpecialEvent'); // detach a callable $evtManager->detachListener($callable);
-
具有事件感知的主题
use Phossa\Event\Interfaces; class MyEventAware implements Interfaces\EventAwareInterface { // add setEventManager() and triggerEvent() use Interfaces\EventAwareTrait; ... } $subject = new MyEventAware();
-
组合在一起
// set manager to event-aware subject $subject->setEventManager($evtManager); // trigger event $subject->triggerEvent('eventName2');
-
事件通配符
可以通过使用 '' 或 'event' 来监听所有事件。
use Phossa\Event\Interfaces\EventListenerInterface; class Listener implements EventListenerInterface { public function getEventsListening() { return [ 'evtTest1' => 'testC', 'evtTest2' => [ 'testD', 20 ], 'evtTest3' => [ [ 'testA', 70 ], [ 'testB', 50 ] ], // globbing 'evt*' => 'bingo', 'evtTest*' => 'bingo2', '*' => 'wow', ]; } }
-
静态类的事件管理
静态监听器类
use Phossa\Event\Interfaces; class StaticListener implements Interfaces\EventListenerStaticInteface { /* * Get events and callables StaticListener listens to */ public static function getEventsListening() { return array( 'eventName1' => 'method1', // method1 of $this 'eventName2' => array('method2', 20), // priority 20 'eventName3' => array( // multiple callables [ 'method3', 70 ], [ 'method4', 50 ] ) ); } }
用于事件的静态主题类
use Phossa\Event\Interfaces; class StaticEventAware implements Interfaces\EventAwareStaticInterface { // add setEventManager() and triggerEvent() use Interfaces\EventAwareStaticTrait; ... }
静态主题类触发事件如下
// create an event manager/dispatcher $evtManager = new Event\EventManager(); // attach a static listener class $evtManager->attachListener(StaticListener::CLASS); // set manager/dispatcher to event-aware static subject class StaticEventAware::setEventManagerStatically($evtManager); // trigger event by the static subject class StaticEventAware::triggerEventStatically('eventName2');
-
组合事件管理器
可以如下使用组合事件管理器
use Phossa\Event; // global event manager $global_manager = new Event\EventManager(); $global_manager->attachListener($some_global_event_listener); // local event manager $local_manager = new Event\Variation\EventManagerComposite(); $local_manager->attachListener($local_listener); // allow local event manager dispatch events to global event manager $local_manager->setOtherManager('global', $global_manager); // the event aware subject $subject = new MyEventAware(); // set event manager $subject->setEventManager($local_manager); // fire up an event, will look into event handling queue from both // $local_manager and $global_manager $subject->triggerEvent('some_event');
-
不可变事件管理器
use Phossa\Event; // low-level manager to hide $_evtManager = new EventManager(); $_evtManager->attachListener(...); ... // expose an immutable event managet to user $evtManager = new Variation\ImmutableEventManager($_evtManager); // cause an exception $evtManager->detachListener( ... );
-
可共享的事件管理器,全局管理器只有一个副本,而有很多本地管理器。
// get global copy by using static method `getInstance()` $globalEventManager = ShareableEventManager::getInstance(); // normal event managers $localEventManager = new ShareableEventManager(); // is this the global copy? if ($evtManager->isShareable()) { ... } else { ... }
特性
-
支持 PHP 5.4+、PHP 7.0+、HHVM。
-
PHP7 支持返回类型声明和参数类型声明。
-
遵守 PSR-1、PSR-2、PSR-4。
-
解耦的包可以在不使用框架的情况下单独使用。
依赖
-
PHP >= 5.4.0
-
phossa/phossa-shared >= 1.0.8