PHP Classes

Event Bus: Emit events and handle them using wildcards

Recommend this page to a friend!
  Info   View files Example   View files View files (6)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not enough user ratingsTotal: 99 All time: 9,784 This week: 101Up
Version License PHP version Categories
event-bus 0.1.0MIT/X Consortium ...5.5PHP 5, Language
Description 

Author

This class can emit events and handle them using wildcards.

It allows registering event handlers by passing the event name and a callback function that will be called when a matching event is emitted.

The class allows registering event handlers using wildcards like * to match families of event types.

It can also emit events and call all the registered event handlers that match the triggered event.

Innovation Award
PHP Programming Innovation award nominee
May 2016
Number 3


Prize: One ebook of choice by Packt
Many applications use events to customize the actions that should happen and a given class performs a certain activity.

External objects register event handlers and when those events happen the objects are called to perform the necessary integration customization actions.

When you need to register handlers to handle many types of events, it may be tedious to write all the code for the registration.

This class provides a solution to simplify that task that consists of supporting wildcards to specify families of events to be handled by the same object.

This way the handler object can register to handle many types of events at once.

Manuel Lemos
Picture of Jeremiah Ogbomo
  Performance   Level  
Name: Jeremiah Ogbomo <contact>
Classes: 3 packages by
Country: Nigeria Nigeria
Age: 30
All time rank: 359827 in Nigeria Nigeria
Week rank: 312 Up7 in Nigeria Nigeria Up
Innovation award
Innovation award
Nominee: 2x

Example

<?php

require __DIR__.'/../autoload.php';

$events = new Events\Events(true);

/*
Creating Listeners
 */

// Basic
$events->on('alert', function($message){
  echo(
$message);
});
// Multiple
$events->on('alert | keep', function($message){
  echo(
$message);
});

// Regex style (namespacing)
$events->on('alert.*', function($message){
  echo(
$message);
});

// Namespaced for alert.regex.[anything else] excluding alert.regex it self
$events->on('alert.regex.*', function($message){
  echo(
$message);
});

// Namespaced for alert.regex.[anything else] including alert.regex as well
$events->on('alert.regex*', function($message){
  echo(
$message);
});

// Basic with multiple parameter
$events->on('multi', function($message, $extra1, $extra2, $extra3){
  echo(
$message . $extra1 . $extra2 . $extra3);
});

// One-time event listeners
$events->once('one-time', function($message){
  echo(
$message);
});

// Default behaviour Multiple times event listeners
$events->on('multiple-time', function($message){
  echo(
$message);
});


/*
Creating Emitters
 */

/*
This Emitter would attach to the first and second listeners
since they both contain `alert`
 */
$events->emit('alert', 'I love attending to Events ');

echo(
'<br /><br />');

/*
This Emitter would attach to the alert-multi listeners and pass in multiple parameters to it
 */
$events->emit('multi', 'I love attending to Events ', 'again, ', 'again ', 'and again');

echo(
'<br /><br />');

/*
This Emitter would attach to the second listener
since it contain `keep`
 */
$events->emit('keep', 'I love attending to Events ');

echo(
'<br /><br />');

/*
This Emitter would attach to the third and fifth listener
since it allows for events 'namespaced' with `alert.`, `alert.regex` and `alert.regex.`
 */
$events->emit('alert.regex', 'I love attending to Events ');

echo(
'<br /><br />');

/*
This Emitter would attach to the third listener
since it allows for events 'namespaced' with `alert.`
 */
$events->emit('alert.grep.one', 'I love attending to Events ');
echo(
'<br /><br />');

/*
This Emitter would attach to the third, fourth and fifth listener
since it allows for events 'namespaced' with `alert.`, `alert.regex` and `alert.regex.`
 */
$events->emit('alert.regex.two', 'I love attending to Events ');

echo(
'<br /><br />');

/*
This Emitter would only get a one-time listener despite being called multiple times
 */
for ($i=0; $i < 3; $i++) {
 
$events->emit('one-time', 'I love attending to just one Event ');
}

echo(
'<br /><br />');

/*
Default behaviour: Multiple listeners for every time the event is emitted
 */
for ($i=0; $i < 3; $i++) {
 
$events->emit('multiple-time', 'I love attending to multiple Events ');
  echo(
'<br />');
}

echo(
'<br /><br />');

/*
If everytihing went well, this should be the expected out
 */

//
// I love attending to Events I love attending to Events

// I love attending to Events again, again and again

// I love attending to Events

// I love attending to Events I love attending to Events

// I love attending to Events

// I love attending to Events I love attending to Events I love attending to Events

// I love attending to just one Event

// I love attending to multiple Events
// I love attending to multiple Events
// I love attending to multiple Events
//


echo('<pre>');

// Print emitted events log since debug is set to true on the constructor
var_dump(
 
$events->log()
  );


Details

Event-Bus

A micro event emitting and management system for PHP

Getting started

The `true` parameter passed into the constructor allows for logging of emitted events and their point of call. If left empty, it defaults to false which does not keep track hence saving memory.

$events = new Events\Events(true);

Basic Implemetation

Within the listener, `$this` contains the name of the emitted event `$this->event`

$events = new Events\Events(true);

$events->on('alert', function($message){
  echo($message);
});

$events->emit('alert', 'I love attending to Events');

//  I love attending to Events

Basic with multiple parameters

This Emitter would attach to the alert-multi listeners and pass in multiple parameters to it.

$events = new Events\Events(true);

$events->on('multi', function($message, $extra1, $extra2, $extra3){
  echo($message . $extra1 . $extra2 . $extra3);
});

$events->emit('multi', 'I love attending to Events ', 'again, ', 'again ', 'and again');

// I love attending to Events again again and again

Multiple Events on a single listener

$events = new Events\Events(true);

$events->on('alert | keep', function($message){
  echo($message);
});

$events->emit('keep', 'I love attending to Events ');
$events->emit('alert', 'I love attending to Events ');

// I love attending to Events I love attending to Events

One-time event listeners

$events = new Events\Events(true);

$events->once('one-time', function($message){
  echo($message);
});

for ($i=0; $i < 3; $i++) {
  $events->emit('one-time', 'I love attending to just one Event ');
}

// I love attending to just one Event 

Regex style (Namespacing)

$events = new Events\Events(true);

$events->on('alert.*', function($message){
  echo($message);
});

$events->emit('alert.regex.one', 'I love attending to Events ');
$events->emit('alert.grep.one', 'I love attending to Events ');
 
// I love attending to Events I love attending to Events

Wrapping up

Dump all tracked emitters. One can do more with just dumping them on the screen.

var_dump($events->log());

Check the exmaple file for even more elaborate examples.

Licence

Copyright (c) 2016 Jeremiah Ogbomo

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


  Files folder image Files  
File Role Description
Files folder imageEvents (1 file)
Files folder imageexample (1 file)
Accessible without login Plain text file autoload.php Aux. Auxiliary script
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file LICENSE.md Lic. License
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  Events  
File Role Description
  Plain text file Events.php Class Class source

  Files folder image Files  /  example  
File Role Description
  Accessible without login Plain text file index.php Example Example script

 Version Control Unique User Downloads Download Rankings  
 100%
Total:99
This week:0
All time:9,784
This week:101Up