Я знаю, что я могу выбросить исключение из конструктора в PHP, но я должен это сделать? Например, если значение параметра не соответствует ожиданиям.
Или я должен отложить создание исключения до вызова метода. Каковы преимущества и недостатки в обоих случаях?
php
object-oriented
exceptions
exception-handling
Вордсворт
источник
источник
Ответы:
Зачем вам откладывать выбрасывание исключения?
Если вы знаете, что объект не может должным образом создать экземпляр с заданными параметрами, то вам обязательно следует выдать исключение.
В противном случае кто-то может проверить ваш объект на null, чего не будет, и предположить, что все прошло как ожидалось.
Есть много вещей, которые можно сделать с вашим объектом, не вызывая для него метод: он может быть добавлен в список, его можно сравнить, его можно отправить в качестве параметра и т. Д. И т. Д. И т. Д. Все это вещи этого не должно было случиться, учитывая, что это недопустимый объект.
источник
Если ваш конструктор вызывается с неверным параметром (ами), то вы должны (должны?) Вызвать исключение. Если вы этого не сделаете, вы можете получить плохой объект, который будет вести себя не так, как ожидалось.
источник
Абсолютно!!
Вы должны выбросить исключение, если параметры для построения объекта недопустимы или не соответствуют контракту. Не стоит продолжать этот процесс, зная, что объект создан с неверными данными, что может вызвать много проблем, если вы позволите вызывающей стороне идти вперед.
Это всегда лучше "FAIL FAST AND FAIL EARLY"
источник
Это единственный разумный способ сообщить, что строительство объекта не удалось.
источник
Почему бы вам не проверить набор параметров до создания экземпляра вашего объекта? Это гарантирует, что ваш объект будет создан, таким образом, удаляя любые побочные эффекты, которые могут возникнуть в результате его отказа.
Хотя я знаю, что вы можете проверять вещи в своем конструкторе и отбрасывать исключения, я предпочитаю писать свои конструкторы так, чтобы они не выходили из строя. Я выполняю проверку параметров перед созданием экземпляров объектов, которые затем я могу выбросить в исключения, не допустив, чтобы мои конструкторы потерпели неудачу. Я также обычно не пытаюсь создавать новые объекты в своих конструкторах, вместо этого выбирая их экземпляры по мере необходимости.
Просто мое мнение. PHP предлагает много свободы - наслаждайтесь!
источник