smoren/event-based-inheritance-model 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

smoren/event-based-inheritance-model

Composer 安装命令:

composer require smoren/event-based-inheritance-model

包简介

Event-based inheritance model

README 文档

README

Реализует следующую событийную модель:

  • на каждое событие можно добавить неограниченное количество обработчиков, которые помещаются в стек данного события;
  • при инициации события запускается только верхний обработчик из стека, однако он имеет доступ к предыдущему обработчику и может его запустить, если это необходимо.

Таким образом реализуется модель "цепочечного наследования", то есть каждый следующий обработчик может запустить предыдущий плюс доделать что-то свое, причем выполнить эти два действия в любом порядке.

Установка

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
)
*/

统计信息

  • 总下载量: 90
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-01-03

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固