This is a direct port of the EventEmitter class from node.js using PHP 5.4 traits.
Due to the nature of the EventEmitter functionnality, using simple extends sounds like the wrong way to deal with it as it is a set of functionnality to add to an existing class instead of your class extending the functionnalities of EventEmitter. As such traits are the best way to implement this kind of functionnality and those are only available to PHP 5.4+.
<?php
// if using directly
require_once('EventEmitter.php');
// if using through composer just use the autoload
require_once('vendor\.composer\autoload.php');
// test class
class Item {
use \Nekoo\EventEmitter;
public function register($infos) {
// do something
// fire the event
$this->emit('register', $infos);
}
}
// allows you to check if a class uses the event emitter through
// $class instanceof \Nekoo\EventEmitterInterface
class AnotherItem implements \Nekoo\EventEmitterInterface {
use \Nekoo\EventEmitter;
}
// create an instance of our object
$i = new Item();
// register an observer for the register event
$i->on('register', function($infos) {
echo "Item registered!\n";
var_dump($infos);
});
// call the method
$i->register(array('key' => 'value'));
- setMaxListeners(int)
Set the maximum listeners allowed by events, default is 10. Adding too many listeners to a same event on the same object will make fireing events slower and slower, just up this limit if needed.
<?php
$object->setMaxListeners(20);
- emit(string[, mixed arg1, ...])
Emit an event, all arguments provided after the event name are sent to the callback as is.
<?php
$object->emit('event', $foo, $bar);
- on(string, callable)
Register a callback for en event, every forms of callbacks are accepted (strings, arrays or closures).
<?php
$object->on('event', function() { var_dump(func_get_args()); });
- addListener(string, callable)
Alias for on() - all(callable)
Register a callback for en event, every forms of callbacks are accepted (strings, arrays or closures).
<?php
$object->all(function($event, $arg1) { var_dump($event, $arg1); });
- once(string, callable)
Same thing as on() but the listener will only be called once. - off(string, callable)
Removes a listener for this event. You need to provide the very same array or string, or if using a closure the same instance.
<?php
$fun = function($arg1) { echo "event: $arg1\n"; };
$object->on('event', $fun); // adds the event
$object->off('event', $fun); // remove the event
- removeListener(string, callable)
Alias for off() - removeAllListeners([string])
Removes all listeners from a given event, or all listeners from all events if no event provided.
<?php
$object->removeAllListeners('event'); // only for the 'event' event
$object->removeAllListeners(); // for every events on the object
- getListeners(string)
Returns an array with the listeners for this event
<?php
foreach ($object->getListeners('event') as $listener) {
var_dump($listener);
}