что делать при удалении не существующего элемента в массиве объекта

hell0w0rd

Продвинутый новичок
Допустим у нас есть класс у которого возможно расширение чего-либо:
PHP:
class Foo
{
    private $extensions = array();

    public function addExtension(Extension $ext)
    {
        $this->extensions[$ext->getName()] = $ext;

        return $this;
    }
}
А теперь мы хотим удалять расширения. Вот что если расширения с таким именем не существует?
PHP:
    public function removeExtension($name)
    {
        unset($this->extensions[$name]);

        return $this;
    }
В таком коде ошибок не будет, все ок. Или же надо бросать исключение:
PHP:
    public function removeExtension($name)
    {
        if (!array_key_exists($name, $this->extensions)) {
            throw new \InvalidArgumentException('There is no extension with name: ' . $name);
        }
        unset($this->extensions[$name]);

        return $this;
    }
Как правильно, или как делаете вы и почему?
 

С.

Продвинутый новичок
Делай как тебе больше нравится. Только вопрос, что ты будешь делать с этим исключением?
 

Gride

Новичок
Если ты удаляешь из коллекции то, что ты туда не помещал, зачит, где-то есть ошибка в самой логике работы приложения. Исключение позволит ее быстрее найти. Лично я пользуюсь вторым вариантом - бросаю исключение. Если предполагается, что объект может присутствовать, а может и отсутствовать, то предварительно перед вызовом remove() проверяю методом exists(), который возвращает тру или не тру.
 

Вурдалак

Продвинутый новичок
public exists() в общем-то нарушает «tell, don't ask», лучше этого не хотеть. Исключение лучше.
 

yanis

Новичок
Предпочтительнее второй вариант. БОльшая строгость упрощает диагностику ошибок.
 
Сверху