PHPackages                             alexpts/php-simple-events - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. alexpts/php-simple-events

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

alexpts/php-simple-events
=========================

Simple events and filters

6.1.0(1y ago)23571[2 issues](https://github.com/alexpts/php-simple-events/issues)1MITPHPPHP &gt;=8.1CI failing

Since Jan 1Pushed 1y ago3 watchersCompare

[ Source](https://github.com/alexpts/php-simple-events)[ Packagist](https://packagist.org/packages/alexpts/php-simple-events)[ Docs](https://github.com/alexpts/php-simple-events)[ RSS](/packages/alexpts-php-simple-events/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (10)Dependencies (3)Versions (16)Used By (1)

php-simple-events
=================

[](#php-simple-events)

[![unit tests](https://github.com/alexpts/php-simple-events/actions/workflows/phpunit.yml/badge.svg)](https://github.com/alexpts/php-simple-events/actions/workflows/phpunit.yml/badge.svg)[![codecov](https://camo.githubusercontent.com/a285941444b0c928062498382fde3256447b5dd23ca7f12c200374f406ba2782/68747470733a2f2f636f6465636f762e696f2f67682f616c65787074732f7068702d73696d706c652d6576656e74732f6272616e63682f6d61737465722f67726170682f62616467652e7376673f746f6b656e3d3851334b43374249434c)](https://codecov.io/gh/alexpts/php-simple-events)

EventEmitter
------------

[](#eventemitter)

It is very fast event emitter and filters.

Installation
------------

[](#installation)

`$ composer require alexpts/php-simple-events`

Usage
-----

[](#usage)

### Creating an Emitter

[](#creating-an-emitter)

```
$emitter = new \PTS\Events\EventEmitter;
```

### Adding Listeners

[](#adding-listeners)

Callable handler

```
$emitter->on('user.created', function (User $user) use ($logger) {
    $logger->log(sprintf("User '%s' was created.", $user->getLogin()));
});
```

With priority

```
$emitter->on('user.created', $handler, 100);
```

With extra arguments for EventEmitterExtraArgs instance (EventEmitter instance ignores extra args)

```
$emitter = new \PTS\Events\EventEmitterExtraArgs;

$extra1 = 1;
$extra2 = 'some';

$handler = function(string $log, int $extra1, string $extra2) {
   // ...
};

$emitter->on('log', $handler, 50, [$extra1, $extra2]);
$emitter->emit('log', ['some log']);
```

### Removing Listeners

[](#removing-listeners)

Remove concrete handler

```
$handler = fn() => 'log';
$emitter->on('log', $handler)
$emitter->off('log', $handler);
```

Remove all handlers

```
$emitter->off('log');
```

Remove concrete handler with priority

```
$emitter->off('log', $handler, 100);
```

Emitting Events
---------------

[](#emitting-events)

Simple emit

```
$emitter->emit('log');
```

Pass arguments on emit

```
$emitter->on('log', function(string $log, int $a2, bool $a3) {
    // ...
});
$emitter->emit('log', ['arg1', 2, true]);
```

Interface
---------

[](#interface)

```
emit(string $name, array $args = []): self;
on(string $name, callable $handler, int $priority = 50, array $extraArgs = []): self;
once(string $name, callable $handler, int $priority = 50, array $extraArgs = []): self;
off(string $event, callable $handler = null, int $priority = null): self;

listeners(string $event = null): array;
eventNames(): array;
```

#### EventHandler

[](#eventhandler)

EventHandler must be `callable`

```
$eventsBus = new \PTS\Events\EventEmitter;

$eventsBus->on('some:event', function(){ ... });
$eventsBus->on('some:event', 'trim');
$eventsBus->on('some', ['ClassName', 'method']);
$eventsBus->on('some', [$this, 'method']);
$eventsBus->once('some', $instanceWithInvokeMethod);
```

#### Order handlers

[](#order-handlers)

Listeners have priority. All listeners invoke by priority

```
$events->on('post:title', 'trim', 10); // second
$events->on('post:title', 'prepareTitle', 70); // first
```

#### Remove handler

[](#remove-handler)

```
// remove handler 'trim' with priority = 10
$events->on('post:title', 'trim', 10);
$events->off('post:title', 'trim', 10);

// remove all handler 'trim' with any priority
$events->on('post:title', 'trim', 10);
$events->off('post:title', 'trim');

// remove all handlers
$events->on('post:title', 'trim', 10);
$events->off('post:title');
```

#### StopPropagation

[](#stoppropagation)

```
$events->on('eventName', function() { ... });
$events->on('eventName', function() { throw new StopPropagation; });
$events->on('eventName', function() { ... }); // it does not call
```

Filters
-------

[](#filters)

### API Filters

[](#api-filters)

Filters is very similar to EventEmitter. Filter passes first value through all listeners and returns modified value.

```
emit(string $name, $value, array $args = []);
on(string $name, callable $handler, int $priority = 50, array $extraArgs = []): self;
once(string $name, callable $handler, int $priority = 50, array $extraArgs = []): self;
off(string $event, callable $handler = null, int $priority = null): self;

listeners(string $event = null): array;
eventNames(): array;
```

Example

```
$filters = new \PTS\Events\Filters;

$filters->on('post:title', 'trim');
$title = $filters->filter('post:title', '   Raw title   '); // `Raw title`
```

### Inject EventEmitter / FilterEmitter

[](#inject-eventemitter--filteremitter)

1. Event/Filter Bus.

```
use PTS\Events\Bus\EventBusTrait;

class Service {
    use EventBusTrait;

    public function getPost()
    {
        $post = ...;
        // you can to modify $post via filter/event
        $post = $this->filter('getPost', $post); // from EventBusTrait
        return $post;
    }
}
```

2. Event/Filter for any object.

Extend from EventEmitter:

```
use PTS\Events\Filter\FilterEmitter;
use PTS\Events\EventEmitter;

class Request extend FilterEmitter { // extend EventEmitter

    public function parseHeader()
    {
        $rawHttpRequest = '...';
        $headers = $this->filter('parseHeader', $rawHttpRequest);
        return $headers;
    }
}

$request = new Request;
$parseHeader = new ParserHeader;
$request->on('parseHeader', [$parseHeader, 'parse']);
$headers = $request->parseHeader();
```

Use trait:

```
use PTS\Events\Filter\FilterEmitterTrait;
use PTS\Events\EventEmitterTrait;

class Request

    use FilterEmitterTrait;

    public function parseHeader()
    {
        $rawHttpRequest = '...';
        $headers = $this->filter('parseHeader', $rawHttpRequest);
        return $headers;
    }
}

$request = new Request;
$parseHeader = new ParserHeader;
$request->on('parseHeader', [$parseHeader, 'parse']);
$headers = $request->parseHeader();
```

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance37

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity80

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 98.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~278 days

Recently: every ~404 days

Total

13

Last Release

534d ago

Major Versions

1.2.0 → 2.0.02017-01-02

2.0.0 → 3.0.02018-04-28

3.1.0 → 4.0.02019-12-09

4.0.0 → v5.x-dev2020-09-23

5.0.0 → 6.0.02022-04-11

PHP version history (7 changes)1.0.0PHP &gt;5.5

1.2.0PHP &gt;5.6

2.0.0PHP &gt;=7.1

3.0.0PHP &gt;=7.2

4.0.0PHP &gt;=7.4

5.0.0PHP &gt;=8.0

6.0.0PHP &gt;=8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/31106536118e11bf9d0c9d7f467db5b534efa9c46ee76680b308f0c39d9a798c?d=identicon)[alexpts](/maintainers/alexpts)

---

Top Contributors

[![alexpts](https://avatars.githubusercontent.com/u/1306916?v=4)](https://github.com/alexpts "alexpts (79 commits)")[![codacy-badger](https://avatars.githubusercontent.com/u/23704769?v=4)](https://github.com/codacy-badger "codacy-badger (1 commits)")

---

Tags

eventevent dispatcherfilteremitterevent-emitter

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/alexpts-php-simple-events/health.svg)

```
[![Health](https://phpackages.com/badges/alexpts-php-simple-events/health.svg)](https://phpackages.com/packages/alexpts-php-simple-events)
```

###  Alternatives

[doctrine/event-manager

The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.

6.0k535.0M169](/packages/doctrine-event-manager)[league/event

Event package

1.6k157.9M220](/packages/league-event)[evenement/evenement

Événement is a very simple event dispatching library for PHP

1.4k175.0M356](/packages/evenement-evenement)[tormjens/eventy

The WordPress filter/action system in Laravel

439964.4k29](/packages/tormjens-eventy)[contributte/event-dispatcher

Best event dispatcher / event manager / event emitter for Nette Framework

292.5M20](/packages/contributte-event-dispatcher)[slince/event-dispatcher

Event dispatcher package

106.1k2](/packages/slince-event-dispatcher)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
