Over a million developers have joined DZone.
Platinum Partner

sabre-event, a simple event management library for PHP 5.4

· Web Dev Zone

The Web Dev Zone is brought to you in partnership with Mendix. Download this Forrester Report to gain a better understanding of the low-code platform market and how to make a strategic platform selection you won’t regret.

I just released version 1.0 of sabre-event, a simple event management library for PHP, heavily inspired by both nodejs' EventEmitter, and Igor Wielder's Événement.

This library has a few extra features not in Événement that I really needed, and Igor had no plans adding it to his library, so I wrote my own.

In a nutshell, this is how you use it:

<?php

use Sabre\Event\EventEmitter;

include 'vendor/autoload.php';

$eventEmitter = new EventEmitter();

// subscribing
$eventEmitter->on('create', function() {

    echo "Something got created, apparently\n"

});

$eventEmitter->emit('create');

?>

The EventEmitter object can also be integrated into existing objects, by extending it, or using it as a trait:

<?php

use Sabre\Event;

class MyNotUneventfulApplication implements Event\EventEmitterInterface
{

    use Event\EventEmitterTrait;

}

?>

It differs from Événement in two features:

  1. It's possible to prioritize listeners, and let them trigger earlier or later in the event chain.
  2. It's possible for listeners to break the event chain, much like javascript's preventDefault().

I hope it will be useful to others. You can find the full documentation on GitHub, and the preferred installation method is through Composer.

The Web Dev Zone is brought to you in partnership with Mendix. Better understand the aPaaS landscape and how the right platform can accelerate your software delivery cadence and capacity with the Gartner 2015 Magic Quadrant for Enterprise Application Platform as a Service.

Topics:

Published at DZone with permission of Evert Pot , DZone MVB .

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}