/** * @param int $streamVersion * @param Event[] $events */ public function __construct($streamVersion, array $events) { Assert::argumentAtLeast($streamVersion, 1, 'Stream version must be 1 at least'); Assert::argumentLengthAtLeast($events, 1, 'Events list must NOT be empty'); $this->streamVersion = $streamVersion; array_walk($events, function (Event $event) { $this->events[] = $event; }); }
/** * @param Event[] $domainEvents * @param int $eventStreamVersion * @return $this */ public static function constructWithEventStream(array $domainEvents, $eventStreamVersion) { Assert::argumentAtLeast($eventStreamVersion, 1, 'Event version number must be at least 1'); $self = (new ReflectionClass(get_called_class()))->newInstanceWithoutConstructor(); foreach ($domainEvents as $domainEvent) { $self->mutateWhen($domainEvent); } $self->setUnmutatedVersion($eventStreamVersion); return $self; }