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