. */ namespace SP\Core\Events; use SP\Core\Exceptions\InvalidClassException; use SP\Core\Exceptions\SPException; /** * Class Event * * @package SP\Core\Events */ class Event { private object $source; private ?EventMessage $eventMessage; /** * Event constructor. * * @param object $source * @param EventMessage|null $eventMessage * */ public function __construct( object $source, EventMessage $eventMessage = null ) { $this->source = $source; $this->eventMessage = $eventMessage; } /** * @throws InvalidClassException */ public function getSource(?string $type = null): object { if ($type !== null && ($source = get_class($this->source)) !== $type && !is_subclass_of($this->source, $type) ) { throw new InvalidClassException( 'Source type mismatch', SPException::ERROR, sprintf('Source: %s - Expected: %s', $source, $type) ); } return $this->source; } public function getEventMessage(): ?EventMessage { return $this->eventMessage; } }