Wiem, że mogę zgłosić wyjątek od konstruktora w PHP, ale czy powinienem to zrobić? Na przykład, jeśli wartość parametru nie jest taka, jak się spodziewałem.
A może powinienem odłożyć zgłoszenie wyjątku do momentu wywołania metody Jakie są zalety i wady w obu przypadkach?
php
object-oriented
exceptions
exception-handling
WordsWorth
źródło
źródło
Odpowiedzi:
Dlaczego miałbyś przełożyć rzucanie wyjątku?
Jeśli wiesz, że obiekt nie może poprawnie utworzyć instancji z podanymi parametrami, zdecydowanie powinieneś rzucić wyjątek.
W przeciwnym razie ktoś może przetestować twój obiekt na wartość zerową, co nie będzie, i może założyć, że wszystko poszło zgodnie z oczekiwaniami.
Istnieje wiele rzeczy, które można zrobić na obiekcie bez wywoływania metody: można go dodać do listy, można go porównać, wysłać jako parametr itp. Itd. Wszystko to są rzeczy to nie powinno się zdarzyć, biorąc pod uwagę, że nie jest to prawidłowy obiekt.
źródło
Jeśli twój konstruktor jest wywoływany ze złymi parametrami, powinieneś (musisz?) Zgłosić wyjątek. Jeśli tego nie zrobisz, możesz dostać zły przedmiot, który nie będzie się zachowywał zgodnie z oczekiwaniami.
źródło
Absolutnie!!
Powinieneś zgłosić wyjątek, jeśli parametry budowy obiektu są nieprawidłowe lub niezgodne z umową. Nie jest dobrym pomysłem kontynuowanie przepływu, wiedząc, że obiekt jest skonstruowany ze złymi danymi, co może powodować wiele problemów, jeśli pozwolisz dzwoniącemu iść naprzód.
Zawsze lepiej jest „FAIL FAST AND FAIL EARLY”
źródło
To jedyny rozsądny sposób poinformowania, że konstrukcja obiektu nie powiodła się.
źródło
Dlaczego nie sprawdziłbyś zestawu parametrów przed utworzeniem wystąpienia obiektu? Takie postępowanie zapewni utworzenie obiektu, a tym samym usunięcie wszelkich skutków ubocznych, które mogą wystąpić po jego awarii.
Chociaż wiem, że możesz sprawdzać rzeczy w swoim konstruktorze i podrzucać wyjątki, wolę pisać moje konstruktory w taki sposób, aby nie zawiodły. Sprawdzam poprawność parametrów przed tworzeniem instancji obiektów, które mogę następnie odrzucać wyjątki bez awarii moich konstruktorów. Generalnie nie próbuję również tworzyć instancji nowych obiektów w moich konstruktorach, zamiast tego tworzę instancję w razie potrzeby.
Tylko moja opinia. PHP oferuje dużo swobody - ciesz się!
źródło