event based inheritance model php
Release
Realizes the following event model:
Thus, the “chain inheritance” model is implemented, that is, each next handler can start the previous plus to finish something of its own, and to perform these two actions in any order.
composer require smoren/event-based-inheritance-model
<?php
use Smoren EventBasedInheritanceModel EventBus ;
use Smoren EventBasedInheritanceModel Listener ;
// создаем шину
$ bus = new EventBus ([
// вводим событие onTest и назначаем на него обработчик
' onTest ' => function (& $ params , Listener $ listener ) {
$ params [ ' a ' ]++;
echo " onTest (0): " . json_encode ( $ params ). "n" ;
},
]);
// добавляем в стек обработчиков события onTest еще один обработчик
$ bus -> addListener ( ' onTest ' , function (& $ params , Listener $ listener ) {
$ listener -> handlePrevious ( $ params ); // в начале своего исполнения он запускает предыдущий
$ params [ ' a ' ]++;
echo " onTest (1): " . json_encode ( $ params ). "n" ;
});
// добавляем в стек обработчиков события onTest еще один обработчик
$ bus -> addListener ( ' onTest ' , function (& $ params , Listener $ listener ) {
$ listener -> handlePrevious ( $ params ); // в начале своего исполнения он запускает предыдущий
$ params [ ' a ' ]++;
echo " onTest (2): " . json_encode ( $ params ). "n" ;
return array_merge ( $ params , [ ' b ' => 0 ]);
});
// вводим событие onTest1 и назначаем на него обработчик
$ bus -> addListener ( ' onMyTest ' , function (& $ params , Listener $ listener ) {
// в начале своего исполнения он запускает предыдущий, но предыдущего нет, поэтому строка не имеет смысла
$ listener -> handlePrevious ( $ params );
$ params -> a ++;
echo " onMyTest (0): " . json_encode ( $ params ). "n" ;
});
// добавляем в стек обработчиков события onTest1 еще один обработчик
$ bus -> addListener ( ' onMyTest ' , function (& $ params , Listener $ listener ) {
$ listener -> handlePrevious ( $ params );
$ params -> a ++;
echo " onMyTest (1): " . json_encode ( $ params ). "n" ;
return $ params ;
});
// инициируем событие onTest
$ params = [ ' a ' => 1 ];
$ result = $ bus -> trigger ( ' onTest ' , $ params );
print_r ( $ result ); // в результате получим то, что вернет верхний в стеке обработчик
/*
onTest (0): {"a":2}
onTest (1): {"a":3}
onTest (2): {"a":4}
Array
(
[a] => 4
[b] => 0
)
*/
echo "n" ;
// инициируем событие onMyTest
$ params = new stdClass ();
$ params -> a = 1 ;
$ result = $ bus -> trigger ( ' onMyTest ' , $ params );
print_r ( $ result ); // в результате получим то, что вернет верхний в стеке обработчик
/*
onMyTest (0): {"a":2}
onMyTest (1): {"a":3}
stdClass Object
(
[a] => 3
)
*/