public function mergeWith(self $flags, bool $override = true) : self
{
if ($override) {
$clone = clone $this;
foreach ($flags as $stringFlag => $flag) {
/** @var FlagInterface $flag */
$clone->flags[$flag->__toString()] = clone $flag;
}
} else {
$clone = clone $flags;
$clone->key = $this->key;
foreach ($this as $stringFlag => $flag) {
/** @var FlagInterface $flag */
$clone->flags[$flag->__toString()] = clone $flag;
}
}
return $clone;
}