webfiori/event 问题修复 & 功能扩展

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

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

webfiori/event

Composer 安装命令:

composer require webfiori/event

包简介

A lightweight event dispatcher library for PHP.

README 文档

README

A lightweight event dispatcher library for PHP.

Supported PHP Versions

This library requires PHP 8.1 or higher.

Build Status

Features

  • Simple APIlisten() and dispatch(), nothing else to learn
  • Callable listeners — use closures for quick inline reactions
  • Class-based listeners — implement ListenerInterface for reusable, testable handlers
  • Static facade (EventDispatcherFacade) for quick usage without DI
  • Events are plain classes — no interface or base class required
  • Zero dependencies — requires only PHP 8.1+

Installation

composer require webfiori/event

Usage

Define Events

Events are plain classes that hold data about what happened:

class UserRegistered {
    public function __construct(
        public readonly string $email,
        public readonly string $name
    ) {}
}

class OrderPlaced {
    public function __construct(
        public readonly int $orderId,
        public readonly float $total
    ) {}
}

Register Listeners

use WebFiori\Event\EventDispatcher;

$dispatcher = new EventDispatcher();

// Callable listener (inline)
$dispatcher->listen(UserRegistered::class, function (UserRegistered $event) {
    echo "Welcome {$event->name}!\n";
});

// Class-based listener (duck typing — full type hinting on handle())
class SendWelcomeEmail {
    public function handle(UserRegistered $event): void {
        mail($event->email, 'Welcome!', "Hi {$event->name}");
    }
}

$dispatcher->listen(UserRegistered::class, new SendWelcomeEmail());

Dispatch Events

$dispatcher->dispatch(new UserRegistered('john@example.com', 'John'));
// All listeners registered for UserRegistered are called

Static Facade

use WebFiori\Event\EventDispatcherFacade;

EventDispatcherFacade::listen(OrderPlaced::class, function (OrderPlaced $event) {
    echo "Order #{$event->orderId} placed!\n";
});

EventDispatcherFacade::dispatch(new OrderPlaced(42, 99.99));

API

EventDispatcher

Method Description
listen(string $eventClass, callable|ListenerInterface $listener) Register a listener for an event
dispatch(object $event) Dispatch event to all registered listeners
getListeners(string $eventClass): array Get listeners for an event
getListenerCount(): int Total registered listeners
reset(): void Remove all listeners

EventDispatcherFacade

Static wrapper. Same methods as EventDispatcher plus getInstance(), setInstance(), reset().

Listener Classes (Duck Typing)

Any class with a public handle() method can be a listener. Type-hint the parameter with the specific event class for full IDE support:

class MyListener {
    public function handle(SomeEvent $event): void {
        // Full autocomplete on $event
    }
}

Design Decisions

  • Events are plain classes — no marker interface needed. Any object can be an event.
  • Listeners use duck typing — any class with a handle() method works. No interface to implement, full type hinting on the event parameter.
  • Listeners are registered explicitlylisten(EventClass, listener). No magic auto-discovery in the library (the framework handles that).
  • Listeners execute in registration order — predictable, no priority system.
  • No event propagation stopping — all listeners always run. Keep it simple.

License

MIT

统计信息

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

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-29

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固