Я создаю метод в модели Doctrine для добавления связанных объектов в коллекцию, но я хочу создать исключение, когда в эту коллекцию добавляется повторяющийся объект.
Вот тест(ы):
public function testFluentInterface( )
{
$sport = new Sport();
$this->assertSame($sport, $sport->addCode('ANY'),
'Expected Sport to implement fluent interface.'
);
}
public function testCannotAddSameCodeMoreThanOnce( )
{
$code = 'BAZ';
$sport = new Sport();
$sport->addCode($code);
try
{
$sport->addCode($code);
$this->fail(
'Expected error when trying to add the same code to a sport more than once.'
);
}
catch( /*SomeKindOf*/Exception $e )
{
}
}
Сначала я подумал, что в этом случае может быть уместно использовать OverflowException
, но я не уверен является ли «это значение уже существует» таким же, как «этот контейнер заполнен»:
Возникает исключение при добавлении элемента в полный контейнер.
Есть UnexpectedValueException
, но он кажется более применимым к переменным с неправильными типами:
Исключение возникает, если значение не совпадает с набором значений. Обычно это происходит, когда функция вызывает другую функцию и ожидает, что возвращаемое значение будет иметь определенный тип или значение, не включая арифметические ошибки или ошибки, связанные с буфером.
Я всегда мог бы использовать LogicException
, но это кажется немного общим для этого варианта использования:
Исключение, представляющее ошибку в логике программы. Такого рода исключения должны напрямую приводить к исправлению в вашем коде.
Есть ли здесь лучший выбор? Верны ли мои наблюдения? Какое исключение SPL будет наиболее подходящим при попытке добавить дубликат в коллекцию, которая должна содержать уникальные значения?