PHPackages                             ddouggs/event\_manager - 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. ddouggs/event\_manager

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

ddouggs/event\_manager
======================

Dota o sistema PHP do gerênciamento de eventos nomeados

v0.6.11(2w ago)017↓95%1Apache-2.0PHP

Since Mar 28Pushed 2w agoCompare

[ Source](https://github.com/DDouGGS/event_manager)[ Packagist](https://packagist.org/packages/ddouggs/event_manager)[ RSS](/packages/ddouggs-event-manager/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (10)Dependencies (1)Versions (23)Used By (1)

EventManager
============

[](#eventmanager)

Sistema de gerenciamento de eventos e observadores em PHP utilizando o padrão **Observer** e suporte a **Reações**.

A classe `EventManager` permite:

- Registrar eventos e observadores (observers)
- Notificar observadores e reações enviando parâmetros
- Registrar reações customizadas (`ReactionsInterface`)
- Anexar (`attach`) e desanexar (`deattach`) observadores
- Verificar a existência e recuperar eventos registrados
- Listar observadores ativos (`keys`) e limpar eventos (`clear`)

---

📌 Estrutura e Namespace
-----------------------

[](#-estrutura-e-namespace)

```
namespace event_manager;

use event_manager\Observers;
use event_manager\ReactionsInterface;
use event_manager\ObserversInterface;

abstract class EventManager
```

A classe utiliza uma propriedade estática para armazenar os eventos e observadores registrados:

```
public static $events = array();
```

---

🚀 Instalação e Requisitos
-------------------------

[](#-instalação-e-requisitos)

### Requisitos

[](#requisitos)

- PHP 7.x ou superior

### Autoload via Composer

[](#autoload-via-composer)

Certifique-se de carregar o autoloader no seu projeto:

```
require_once __DIR__ . '/vendor/autoload.php';

use event_manager\EventManager;
```

---

🛠️ Métodos Disponíveis
----------------------

[](#️-métodos-disponíveis)

### `add($name, $observer = null)`

[](#addname-observer--null)

Registra um novo evento ou acrescenta um observador a um evento já existente (atalho para `observer()`).

- **Parâmetros:**
    - `string $name`: Nome do evento.
    - `object|null $observer`: Instância da classe observadora (opcional).
- **Retorno:** `bool`

```
EventManager::add('user.created');
// ou com um observer
EventManager::add('user.created', new UserObserver());
```

---

### `observer($name, $observer = null)`

[](#observername-observer--null)

Registra um novo evento ou adiciona um observador a um evento existente. Para que o observer seja anexado com sucesso, ele deve possuir um método com o mesmo nome do evento.

- **Parâmetros:**
    - `string $name`: Nome do evento.
    - `object|null $observer`: Instância da classe observadora (opcional).
- **Retorno:** `bool`

```
EventManager::observer('user_created', new UserObserver());
```

---

### `reaction($name, ReactionsInterface $reaction)`

[](#reactionname-reactionsinterface-reaction)

Registra uma reação direta a um evento através de uma classe que implementa `ReactionsInterface`.

- **Parâmetros:**
    - `string $name`: Nome do evento.
    - `ReactionsInterface $reaction`: Instância de uma classe de reação.
- **Retorno:** `bool`

```
EventManager::reaction('order.shipped', new SendEmailReaction());
```

---

### `retrieve($name)`

[](#retrievename)

Recupera o objeto de evento/observador registrado pelo nome.

- **Parâmetros:**
    - `string $name`: Nome do evento.
- **Retorno:** `ObserversInterface|ReactionsInterface|null`

```
$event = EventManager::retrieve('user.created');
```

---

### `exists($name)`

[](#existsname)

Verifica se um evento já foi registrado.

- **Parâmetros:**
    - `string $name`: Nome do evento.
- **Retorno:** `bool`

```
if (EventManager::exists('user.created')) {
    // Evento registrado
}
```

---

### `attach($name, $observer)`

[](#attachname-observer)

Anexa um novo observador a um conjunto de observadores de um evento já registrado.

- **Parâmetros:**
    - `string $name`: Nome do evento.
    - `object $observer`: Instância do observador.
- **Retorno:** `bool`

```
EventManager::attach('user.created', new SendWelcomeEmailObserver());
```

---

### `deattach($name, $index)`

[](#deattachname-index)

Remove um observador específico de um evento pelo seu índice ou chave (geralmente o nome da classe do observador).

- **Parâmetros:**
    - `string $name`: Nome do evento.
    - `string $index`: Identificador/nome da classe do observador a ser removido.
- **Retorno:** `bool`

```
EventManager::deattach('user.created', 'UserObserver');
```

---

### `notify($name, array $paramn = array())`

[](#notifyname-array-paramn--array)

Notifica todos os observadores ou executa a reação associada ao evento, passando um array de parâmetros.

- **Parâmetros:**
    - `string $name`: Nome do evento.
    - `array $paramn`: Array de parâmetros a serem enviados (padrão: `array()`).
- **Retorno:** `bool`

```
EventManager::notify('user.created', ['id' => 1, 'email' => 'user@example.com']);
```

---

### `clear($name)`

[](#clearname)

Limpa/remove os observadores registrados para um determinado evento.

- **Parâmetros:**
    - `string $name`: Nome do evento.
- **Retorno:** `bool`

```
EventManager::clear('user.created');
```

---

### `keys($name)`

[](#keysname)

Retorna uma lista com as chaves (nomes das classes) dos observadores registrados em determinado evento.

- **Parâmetros:**
    - `string $name`: Nome do evento.
- **Retorno:** `array`

```
$observers = EventManager::keys('user.created');
// Retorna array com os nomes das classes dos observers
```

---

💡 Exemplos de Uso
-----------------

[](#-exemplos-de-uso)

### 1. Utilizando Observadores (Observers)

[](#1-utilizando-observadores-observers)

A classe do observador deve conter um método com o mesmo nome do evento a ser tratado:

```
use event_manager\EventManager;

class UserObserver
{
    public function user_created(array $data)
    {
        echo "Usuário criado com sucesso: " . $data['name'];
    }
}

// 1. Registra o evento com o observador
EventManager::add('user_created', new UserObserver());

// 2. Dispara a notificação para o evento
EventManager::notify('user_created', ['name' => 'Maria']);
```

### 2. Adicionando Múltiplos Observadores

[](#2-adicionando-múltiplos-observadores)

```
class LogObserver
{
    public function user_created(array $data)
    {
        // Registra log...
    }
}

// Registra o evento
EventManager::add('user_created');

// Anexa múltiplos observadores
EventManager::attach('user_created', new UserObserver());
EventManager::attach('user_created', new LogObserver());

// Dispara o evento para todos os observadores
EventManager::notify('user_created', ['name' => 'João']);
```

### 3. Utilizando Reações (Reactions)

[](#3-utilizando-reações-reactions)

Reações implementam `ReactionsInterface` e lidam diretamente com o evento:

```
use event_manager\EventManager;
use event_manager\ReactionsInterface;

class AuditReaction implements ReactionsInterface
{
    public function notify(array $paramn = array())
    {
        // Executa a reação ao evento
    }
}

// Registra a reação
EventManager::reaction('audit.log', new AuditReaction());

// Dispara a reação
EventManager::notify('audit.log', ['action' => 'login']);
```

---

📄 Licença
---------

[](#-licença)

Este projeto está sob a Licença **Apache 2.0**. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance97

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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 ~7 days

Recently: every ~24 days

Total

17

Last Release

16d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/12718033?v=4)[Douglas Gonçalves de Souza](/maintainers/douggonsouza)[@douggonsouza](https://github.com/douggonsouza)

---

Top Contributors

[![DDouGGS](https://avatars.githubusercontent.com/u/158485475?v=4)](https://github.com/DDouGGS "DDouGGS (22 commits)")

### Embed Badge

![Health badge](/badges/ddouggs-event-manager/health.svg)

```
[![Health](https://phpackages.com/badges/ddouggs-event-manager/health.svg)](https://phpackages.com/packages/ddouggs-event-manager)
```

PHPackages © 2026

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