Why using an object to store only the wrapped callback and the event resource? It uses more memory and has more overhead.

```php
$event = new Event($this->eventBase, -1, $flags, function () use ($timer) {
    call_user_func($timer->getCallback(), $timer);

    if ($this->isTimerActive($timer) && !$timer->isPeriodic()) {
        $this->cancelTimer($timer);
    }
 });

$this->timerEvents->attach($timer, $event);
$event->add($timer->getInterval());
```

Unless you need that trick to push the callback into `$this->keepAlive` later in `cancelTimer()`, but you can remove that as [discussed earlier](https://github.com/jmalloc/react/commit/db41311c7d380a003d3f421d7033555347791c9d#src-react-eventloop-exteventloop-php-P38).