ifcanduela / events
小巧简单的事件库
1.0.0
2019-09-30 06:05 UTC
Requires (Dev)
- phpunit/phpunit: ^7.4
This package is auto-updated.
Last update: 2024-09-29 05:22:07 UTC
README
任何类型项目的简单即插即用事件库。
安装
使用 Composer
composer require ifcanduela/events
用法
将 \ifcanduela\events\CanEmitEvents
或 \ifcanduela\events\CanListenToEvents
特性混入你的类中,并调用 emit()
或 listenTo()
方法。
发射事件
一个对象可以使用 CanEmitEvents
特性和它的 emit()
方法来发射事件。
一个 事件 可能是一个简单的 string
,或者是一个除 stdClass
之外的类的对象。如果事件是一个 string
,则可以提供一个可选的 $payload
,并将其发送到监听器而不是事件字符串。
class MyEventType { public $someProperty; public function __construct(int $data) { $this->someProperty = $data; } } class MyEventEmitter { use \ifcanduela\events\CanEmitEvents; public function createData() { $data = random_int(); // using an object as event $this->emit(new MyEventType($data)); // using a string as event name; the array will be sent to the listener $this->emit("data.created", ["data" => $data]); } }
监听事件
一个对象可以使用 CanListenToEvents
特性和调用 listenTo()
来监听事件。
事件回调将接收事件的有效负载,如果有的话。对于事件对象,$payload
将是事件对象本身,否则它将是发射器传递的任何有效负载。
class MyEventListener { public function __construct() { $this->listenTo(MyEventType::class, function ($event) { echo $event->someProperty; }); $this->listenTo("data.created", function ($payload) { echo $payload["data"]; }); $this->listenTo("data.created", [$this, "eventHandler"]); } public function eventHandler($payload) { echo $payload["data"]; } }
直接使用 EventManager
事件管理器允许你的代码从外部对象发射和监听事件。将 $object->emit()
替换为 EventManager::trigger()
,将 $object->listenTo()
替换为 EventManager::register()
。这两个静态方法由特性在幕后使用,所以功能完全相同。
EventManager::register("event.name", function ($payload) { assert($payload["a"] === 1); assert($payload["b"] === 2); }); EventManager::trigger("event.name", ["a" => 1, "b" => 2]);
许可证
MIT.