Simple Events
Simple event dispatching library for PHP, (*1)
, (*2)
, (*3)
Installation
Composer
The preferred way to install this extension is through Composer., (*4)
Either run, (*5)
composer require yarcode/simple-events
or add, (*6)
"yarcode/simple-events": "*"
to the require section of your composer.json
, (*7)
Usage
Via EventEmitterTrait
Attach \YarCode\Events\EventEmitterTrait
to your class to make it EventEmitter
, (*8)
class MyClass {
use \YarCode\Events\EventEmitterTrait;
...
}
$emitter = new MyClass();
Standalone EventEmitter
Or create an instance of \YarCode\Events\EventEmitter
., (*9)
$emitter = new \YarCode\Events\EventEmitter();
Adding listeners
You can add callable
listener for any string event name., (*10)
$emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) {
echo "{$event->name} was emitted";
});
$emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) {
echo "{$event->name} was emitted one more time";
});
Emitting events
You can emit named event with default event object., (*11)
$emitter->emit('TestEvent');
// TestEvent was emitted
// TestEvent was emitted one more time
Or you can pass \YarCode\Events\Event
object to the listeners., (*12)
$event = new \YarCode\Events\Event();
$event->payload['key'] = 'value';
$emitter->emit('TestEvent', $event);
// TestEvent was emitted
// TestEvent was emitted one more time
You could pass any data as event payload.
It would be passed as a first parameter to a listener callable., (*13)
$data = ['foo', 'bar'];
$emitter->emit('MixedDataEvent', $data);
Removing listeners
You can remove one concrete listener., (*14)
$callback = function (\YarCode\Events\Event $event) {
echo "{$event->name} was emitted third time";
});
$emitter->addListener('TestEvent', $callback);
$emitter->removeListener('TestEvent', $callback);
Or remove all the listeners for the event., (*15)
$emitter->removeAllListeners('TestEvent');
Or remove all the listeners for all events., (*16)
$emitter->removeAllListeners();
Breaking the execution
Set the $event->handled
property to true
to stop the further listeners execution., (*17)
$emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) {
$event->handled = true;
});
$emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) {
echo "This callback for {$event->name} would never run";
});
$emitter->emit('TestEvent');
Accessing the emitter from the listener
Emitter object is being passed as a second parameter to a listener., (*18)
$emitter->addListener('TestEmitterAccessEvent', function ($data, $emitter) {
echo "Hello";
$emitter->emit('TestEmitterAccessEvent2', $data);
});
$emitter->addListener('TestEmitterAccessEvent2', function ($data) {
echo " World";
});
$emitter->emit('TestEmitterAccessEvent');
// Hello World
License
MIT, (*19)
Links