PHP 5.4 EventEmitter trait ported from node.js
PHP
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src/Nekoo
tests
.gitignore
README.md
composer.json

README.md

EventEmitter

This is a direct port of the EventEmitter class from node.js using PHP 5.4 traits.

Why PHP 5.4?

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+.

How to Use

<?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'));

API

  • 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);
<?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()); });
<?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
<?php
$object->removeAllListeners('event'); // only for the 'event' event
$object->removeAllListeners(); // for every events on the object
<?php
foreach ($object->getListeners('event') as $listener) {
  var_dump($listener);
}