<?php
abstract class DomainEvent
{
private static $events = [];
/**
* @var \DateTime
*/
private $occurredOn;
private function __construct()
{
static::addEvent($this);
$this->occurredOn = new \DateTime();
}
public static function trigger(...$args)
{
$event = new static();
$event->instantiate(...$args);
return $event;
}
abstract protected function instantiate(...$args);
private static function addEvent($event)
{
self::$events[] = $event;
}
public static function getEvents()
{
return self::$events;
}
/**
* @return DateTime
*/
public function getOccurredOn()
{
return $this->occurredOn;
}
}
class UserRegisteredEvent extends DomainEvent
{
private $data;
protected function instantiate(...$args)
{
$this->data = $args;
}
}
class User
{
/**
* @var string
*/
private $username;
/**
* User constructor.
*
* @param string $username
*/
public function __construct($username)
{
$this->username = $username;
UserRegisteredEvent::trigger($this);
}
/**
* @return string
*/
public function getUsername()
{
return $this->username;
}
}
$user = new User('Jimmy K. Oak');
$events = DomainEvent::getEvents();
- Output for 5.6.8 - 5.6.28, 7.0.0 - 7.0.20, 7.1.0 - 7.1.10, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
- Output for 5.4.2 - 5.4.45, 5.5.24 - 5.5.35
- Parse error: syntax error, unexpected '.', expecting '&' or variable (T_VARIABLE) in /in/e9Rq8 on line 18
Process exited with code 255.
preferences:
130.98 ms | 401 KiB | 220 Q