Ich weiß, dass ich in PHP eine Ausnahme vom Konstruktor auslösen kann, aber sollte ich das tun? Zum Beispiel, wenn der Wert eines Parameters nicht dem entspricht, den ich erwartet habe.
Oder sollte ich es verschieben, eine Ausnahme auszulösen, bis eine Methode aufgerufen wird? Was sind in beiden Fällen Vor- und Nachteile?
php
object-oriented
exceptions
exception-handling
WordsWorth
quelle
quelle
Antworten:
Warum würdest du es verschieben, die Ausnahme zu werfen?
Wenn Sie wissen, dass das Objekt mit den angegebenen Parametern nicht ordnungsgemäß instanziiert werden kann, sollten Sie auf jeden Fall eine Ausnahme auslösen.
Andernfalls könnte jemand Ihr Objekt auf null testen, was nicht der Fall ist, und davon ausgehen, dass alles wie erwartet verlaufen ist.
Es gibt eine Menge Dinge, die Sie mit Ihrem Objekt tun können, ohne eine Methode aufzurufen: Es könnte zu einer Liste hinzugefügt, verglichen, als Parameter gesendet werden usw. usw. All dies sind Dinge das hätte nicht passieren dürfen, da es kein gültiges Objekt ist.
quelle
Wenn Ihr Konstruktor mit ungültigen Parametern aufgerufen wird, sollten Sie (müssen?) Eine Ausnahme auslösen. Wenn Sie dies nicht tun, erhalten Sie möglicherweise ein fehlerhaftes Objekt, das sich nicht wie erwartet verhält.
quelle
Absolut!!
Sie sollten die Ausnahme auslösen, wenn die Parameter zum Erstellen des Objekts ungültig oder nicht vertragsgemäß sind. Es ist keine gute Idee, mit dem Ablauf fortzufahren, wenn Sie wissen, dass das Objekt mit schlechten Daten erstellt wurde, was viele Probleme verursachen kann , wenn Sie dem Aufrufer erlauben, fortzufahren.
Es ist immer besser, "SCHNELL SCHLAGEN UND FRÜH SCHLAGEN"
quelle
Dies ist der einzig vernünftige Weg, um darüber zu informieren, dass die Objektkonstruktion fehlgeschlagen ist.
quelle
Warum sollten Sie den Parametersatz nicht validieren, bevor Sie Ihr Objekt instanziieren? Dies würde sicherstellen, dass Ihr Objekt erstellt wird, und somit alle Nebeneffekte entfernen, die bei dessen Ausfall auftreten können.
Obwohl ich weiß, dass Sie die Dinge in Ihrem Konstruktor überprüfen und Ausnahmen werfen können, ziehe ich es vor, meine Konstruktoren so zu schreiben, dass sie nicht fehlschlagen. Ich führe eine Parameterüberprüfung durch, bevor ich Objekte instanziiere, die ich dann ausnehmen kann, ohne dass meine Konstruktoren versagen. Außerdem versuche ich im Allgemeinen nicht, neue Objekte in meinen Konstruktoren zu instanziieren, sondern sie nach Bedarf zu instanziieren.
Nur meine Meinung. PHP bietet viel Freiheit - viel Spaß!
quelle