jbzoo / event
基于事件的开发库
7.0.1
2024-01-28 08:57 UTC
Requires
- php: ^8.1
Requires (Dev)
- jbzoo/data: ^7.1
- jbzoo/toolbox-dev: ^7.1
README
事件发射器是一个简单的模式,允许你创建一个可以发出事件的对象,并允许你监听这些事件。
安装
composer require jbzoo/event
简单示例
use JBZoo\Event\EventManager; $eManager = new EventManager(); // Simple $eManager->on('create', function () { echo "Something action"; }); // Just do it! $eManager->trigger('create');
设置优先级
通过提供优先级,你可以确保订阅者按照特定的顺序处理。默认优先级是 EventManager::MID。低于该优先级的将先触发,高于该优先级的将后触发。如果有两个具有相同优先级的订阅者,它们将执行在一个未定义但确定的顺序中。
// Run it first $eManager->on('create', function () { echo "Something high priority action"; }, EventManager::HIGH); // Run it latest $eManager->on('create', function () { echo "Something another action"; }, EventManager::LOW); // Custom index $eManager->on('create', function () { echo "Something action"; }, 42); // Don't care... $eManager->on('create', function () { echo "Something action"; });
回调类型
支持所有默认的PHP回调,因此不需要闭包。
$eManager->on('create', function(){ /* ... */ }); // Custom function $eManager->on('create', 'myFunction'); // Custom function name $eManager->on('create', ['myClass', 'myMethod']); // Static function $eManager->on('create', [$object, 'Method']); // Method of instance
取消事件队列
use JBZoo\Event\ExceptionStop; $eManager->on('create', function () { throw new ExceptionStop('Some reason'); // Special exception for JBZoo/Event }); $eManager->trigger('create'); // return 'Some reason' or TRUE if all events done
传递参数
参数可以以数组的形式传递。
$eManager->on('create', function ($entityId) { echo "An entity with id ", $entityId, " just got created.\n"; }); $entityId = 5; $eManager->trigger('create', [$entityId]);
因为监听器的返回值实际上无法进行任何操作,所以你可以通过引用传递参数,以便在监听器之间以及监听器与发射器之间进行通信。
$eManager->on('create', function ($entityId, &$warnings) { echo "An entity with id ", $entityId, " just got created.\n"; $warnings[] = "Something bad may or may not have happened.\n"; }); $warnings = []; $eManager->trigger('create', [$entityId, &$warnings]);
命名空间
$eManager->on('item.*', function () { // item.init // item.save echo "Any actions with item"; }); $eManager->on('*.init', function () { // tag.init // item.init echo "Init any entity"; }); $eManager->on('*.save', function () { // tag.save // item.save echo "Saving any entity in system"; }); $eManager->on('*.save.after', function () { // tag.save.after // item.save.after echo "Any entity on after save"; }); $eManager->trigger('tag.init'); $eManager->trigger('tag.save.before'); $eManager->trigger('tag.save'); $eManager->trigger('tag.save.after'); $eManager->trigger('item.init'); $eManager->trigger('item.save.before'); $eManager->trigger('item.save'); $eManager->trigger('item.save.after');
PHP v7.4的基准测试信息总结(执行时间)
所有基准测试都在没有xdebug的情况下执行,并使用一个大型的随机数组和100,000次迭代。
基准测试基于工具 phpbench/phpbench。详细信息请见 此处。
请注意 - 1μs = 1/1,000,000 秒!
基准测试: ManyCallbacks
基准测试: ManyCallbacksWithPriority
基准测试: OneCallback
基准测试: Random
单元测试和代码风格检查
make update make test-all
许可证
MIT