PHPackages                             sharkydog/private-emitter - 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. sharkydog/private-emitter

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

sharkydog/private-emitter
=========================

Non-public emitter extension to evenement/evenement

v1.0.0(1y ago)0535MITPHPPHP &gt;=7.4

Since Oct 10Pushed 1y ago1 watchersCompare

[ Source](https://github.com/sharkydog/private-emitter)[ Packagist](https://packagist.org/packages/sharkydog/private-emitter)[ RSS](/packages/sharkydog-private-emitter/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (1)Versions (2)Used By (5)

private-emitter
===============

[](#private-emitter)

Non-public emitter extension to [evenement/evenement](https://packagist.org/packages/evenement/evenement).

### Basic usage

[](#basic-usage)

```
use SharkyDog\PrivateEmitter\PrivateEmitterTrait;

class Emitter1 {
  use PrivateEmitterTrait;

  public function pubEmitter(): callable {
    return $this->_emitter();
  }

  public function event1($p) {
    $this->_emit('event1', [$p]);
  }
}

$emitter = new Emitter1;
$emitter->on('event1', function($p) {
  echo "event1: $p\n";
});

$emitter->event1('works');
$emitter->emit('event1', ['does not work']);

$pubEmitter = $emitter->pubEmitter();
$pubEmitter('event1', ['also works']);
```

### Capture events in methods

[](#capture-events-in-methods)

Events can be mapped to methods prefixed with `_event_`. Event `event1` would be handled by `_event_event1()` method.

If the same event is emitted in that method, it will now fire the `EventEmitter` listeners.

```
use SharkyDog\PrivateEmitter\PrivateEmitterTrait;

class Emitter2 {
  use PrivateEmitterTrait;

  public function pubEmitter(): callable {
    return $this->_emitter();
  }

  private function _event_event1($p) {
    print "_event_event1: $p\n";
    $this->_emit('event2', [$p]);
  }
  private function _event_event2($p) {
    print "_event_event2: $p\n";
    $this->_emit('event2', [$p]);
    $this->_emit('event3', [$p]);
  }
}

$emitter = new Emitter2;

$emitter->on('event1', function($p) {
  echo "event1: $p\n";
});
$emitter->on('event2', function($p) {
  echo "event2: $p\n";
});
$emitter->on('event3', function($p) {
  echo "event3: $p\n";
});

$pubEmitter = $emitter->pubEmitter();

// calls _event_event1 and emits event2
// then calls _event_event2 and emits event2 and event3
// prints:
//  _event_event1: p1
//  _event_event2: p1
//  event2: p1
//  event3: p1
$pubEmitter('event1', ['p1']);
```

### Forward events

[](#forward-events)

Events can be forwarded to other emitters.

The rules above for capturing events apply. Provided emitter callbacks will be called if events were not captured or were captured and re-emitted.

```
use SharkyDog\PrivateEmitter\PrivateEmitterTrait;
use Evenement\EventEmitter;

// Events can be emitted only
// by whoever $emitter is shared with
class PrivateEmitter {
  use PrivateEmitterTrait;
  public function __construct(&$emitter) {
    $emitter = $this->_emitter();
  }
}

// A simple and boring emitter
class PublicEmitter extends EventEmitter {}

$prvEmitter1Obj = new PrivateEmitter($prvEmitter1Fn);
$prvEmitter2Obj = new PrivateEmitter($prvEmitter2Fn);
$pubEmitter1Obj = new PublicEmitter;

// Let this serve as forwarding callback signature
$pubEmitter1Fn = function(string $event, array $args) use($pubEmitter1Obj) {
  $pubEmitter1Obj->emit($event,$args);
};
// or as EventEmitter::emit() is public
// forwardEvents() bellow can be used with array callable
//$pubEmitter1Fn = [$pubEmitter1Obj,'emit'];

// first listener, first to receive event1
$prvEmitter1Obj->on('event1', function() { echo "event1: prv1\n"; });
// second listener for event1, first for event2
$prvEmitter1Obj->forwardEvents($prvEmitter2Fn, 'event1','event2');
// third listener for event1, second for event2
$prvEmitter1Obj->forwardEvents($pubEmitter1Fn, 'event1','event2');
// third listener for event2
$prvEmitter1Obj->on('event2', function() { echo "event2: prv1\n"; });

// listeners on objects events are forwarded to
$prvEmitter2Obj->on('event1', function() { echo "event1: prv2\n"; });
$prvEmitter2Obj->on('event2', function() { echo "event2: prv2\n"; });
$pubEmitter1Obj->on('event1', function() { echo "event1: pub1\n"; });
$pubEmitter1Obj->on('event2', function() { echo "event2: pub1\n"; });

// prints
//  event1: prv1
//  event1: prv2
//  event1: pub1
//  event2: prv2
//  event2: pub1
//  event2: prv1
$prvEmitter1Fn('event1');
$prvEmitter1Fn('event2');
```

###  Health Score

24

—

LowBetter than 31% of packages

Maintenance34

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

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

Unknown

Total

1

Last Release

622d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d54985ab7d672df15e1ac9f278a842cddb25502a1bda7693e455680dbaa782b4?d=identicon)[SharkyDog](/maintainers/SharkyDog)

### Embed Badge

![Health badge](/badges/sharkydog-private-emitter/health.svg)

```
[![Health](https://phpackages.com/badges/sharkydog-private-emitter/health.svg)](https://phpackages.com/packages/sharkydog-private-emitter)
```

###  Alternatives

[ccxt/ccxt

A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go

42.9k337.6k1](/packages/ccxt-ccxt)[react/stream

Event-driven readable and writable streams for non-blocking I/O in ReactPHP

691139.1M205](/packages/react-stream)[react/child-process

Event-driven library for executing child processes with ReactPHP.

34185.8M150](/packages/react-child-process)[alchemy/binary-driver

A set of tools to build binary drivers

19111.0M40](/packages/alchemy-binary-driver)[react/zmq

ZeroMQ bindings for React.

2471.7M33](/packages/react-zmq)[mkraemer/react-pcntl

PCNTL bindings for ReactPHP

57290.1k9](/packages/mkraemer-react-pcntl)

PHPackages © 2026

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