public function __construct($quantifier, $firstMember, $secondMember = null)
{
if ($quantifier instanceof ValueInterface) {
$quantifier = clone $quantifier;
} elseif (is_scalar($quantifier)) {
$quantifier = (int) $quantifier;
} else {
throw TypeErrorFactory::createForOptionalValueQuantifier($quantifier);
}
if (false === is_string($firstMember) && false === $firstMember instanceof ValueInterface) {
throw TypeErrorFactory::createForOptionalValueFirstMember($firstMember);
}
if (null !== $secondMember && false === is_string($secondMember) && false === $secondMember instanceof ValueInterface) {
throw TypeErrorFactory::createForOptionalValueSecondMember($secondMember);
}
$this->quantifier = $quantifier;
$this->firstMember = $firstMember;
$this->secondMember = $secondMember;
}