/** * @param Token $token * * @throws DomainException If the token is already in play */ public function add(Token $token) { $number = $token->number(); if ($this->has($token->owner(), $number)) { throw new DomainException(sprintf('Token with number "%d" is already in play.', $number->value())); } $tokens = $this->tokensFor($token->owner()); $tokens[$number->value()] = $token; $this->tokensOnTrack->attach($token->owner(), $tokens); }