validators = new \SplObjectStorage(); $this->validatedInstancesContainer = new \SplObjectStorage(); } /** * Checks if the given value is valid according to the validators of the * disjunction. * * So only one validator has to be valid, to make the whole disjunction valid. * Errors are only returned if all validators failed. * * @param mixed $value The value that should be validated */ public function validate(mixed $value): Result { $validators = $this->getValidators(); if ($validators->count() > 0) { $result = null; foreach ($validators as $validator) { $validatorResult = $validator->validate($value); if ($validatorResult->hasErrors()) { if ($result === null) { $result = $validatorResult; } else { $result->merge($validatorResult); } } else { if ($result === null) { $result = $validatorResult; } else { $result->clear(); } break; } } } else { $result = new Result(); } return $result; } }