This component is a simple event dispatcher allows registering callbacks to some events and chain execution of them.
use Scabbia\Events\Delegate;
$delegate = new Delegate();
$delegate->subscribe(function (...$parameters) {
echo 'first subscriber:';
var_dump($parameters);
});
$delegate->subscribe(function (...$parameters) {
echo 'second subscriber:';
echo count($parameters);
});
$delegate->invoke('a', 'b', 'c');
use Scabbia\Events\Delegate;
$delegate = new Delegate();
// a subscription with priority = 300
$delegate->subscribe(function (...$parameters) {
echo 'first subscriber:';
var_dump($parameters);
}, null, 300);
// a subscription with priority = 1 (will be executed first)
$delegate->subscribe(function (...$parameters) {
echo 'second subscriber, but more important:';
echo count($parameters);
}, null, 1);
$delegate->invoke('a', 'b', 'c');
use Scabbia\Events\Delegate;
$delegate = new Delegate();
$delegate->subscribe(function (...$parameters) {
echo 'first subscriber:';
var_dump($parameters);
// breaks the execution
return false;
});
$delegate->subscribe(function (...$parameters) {
echo 'second subscriber, but not going to be executed:';
echo count($parameters);
});
$delegate->invoke('a', 'b', 'c');
use Scabbia\Events\Events;
$eventsManager = new Events();
$eventsManager->on('click', function (...$parameters) {
echo "clicked on x={$parameters[0]} and y={$parameters[1]}!";
});
$eventsManager->on('double_click', function (...$parameters) {
echo 'double clicked!';
});
$eventsManager->dispatch('click', 5, 10);
It is publicly open for any contribution. Bugfixes, new features and extra modules are welcome. All contributions should be filed on the eserozvataf/scabbia2-events repository.