for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Spatie\EventProjector\EventHandlers;
use Exception;
trait HandlesEvents
{
public function handlesEvents(): array
return $this->handlesEvents ?? [];
handlesEvents
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:
class MyClass { } $x = new MyClass(); $x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:
class MyClass { public $foo; } $x = new MyClass(); $x->foo = true;
}
public function methodNameThatHandlesEvent(object $event): string
$handlesEvents = $this->handlesEvents();
$eventClass = get_class($event);
$methodName = $this->getAssociativeMethodName($handlesEvents, $eventClass);
if ($methodName === '') {
$methodName = $this->getNonAssociativeMethodName($handlesEvents, $eventClass);
return $methodName;
public function handleException(Exception $exception)
report($exception);
protected function checkNonAssociativeEvent(array $handlesEvents, string $eventClass): bool
return array_key_exists($eventClass, array_flip($handlesEvents));
protected function getAssociativeMethodName(array $handlesEvents, string $eventClass): string
$methodName = $handlesEvents[$eventClass] ?? '';
if ($methodName !== '') {
$wildcardMethod = $handlesEvents['*'] ?? '';
if ($wildcardMethod !== '') {
return $wildcardMethod;
return '';
protected function getNonAssociativeMethodName(array $handlesEvents, string $eventClass): string
if ($this->checkNonAssociativeEvent($handlesEvents, $eventClass)) {
return 'on'.ucfirst(class_basename($eventClass));
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: