PHPのコンストラクターから例外をスローできることは知っていますが、それを行う必要がありますか?たとえば、パラメータの値が期待どおりではない場合。
または、メソッドが呼び出されるまで例外のスローを延期する必要があります。両方の場合の長所と短所は何ですか?
PHPのコンストラクターから例外をスローできることは知っていますが、それを行う必要がありますか?たとえば、パラメータの値が期待どおりではない場合。
または、メソッドが呼び出されるまで例外のスローを延期する必要があります。両方の場合の長所と短所は何ですか?
回答:
なぜ例外のスローを延期するのですか?
オブジェクトが指定されたパラメーターで適切にインスタンス化できないことがわかっている場合は、間違いなく例外をスローする必要があります。
そうしないと、誰かがあなたのオブジェクトをnullに対してテストするかもしれませんが、それはそうではなく、すべてが期待通りに進んだと仮定することができます。
オブジェクトのメソッドを呼び出さずにオブジェクトにできることはたくさんあります。リストに追加したり、比較したり、パラメーターとして送信したりすることができます。これらはすべてものですそれが有効なオブジェクトではないことを考えると、それは起こるべきではありませんでした。
コンストラクターが不正なパラメーターで呼び出された場合、例外をスローする必要がありますか?そうしないと、期待どおりに動作しない不良オブジェクトを取得する可能性があります。
絶対に!!
オブジェクトを構築するためのパラメーターが無効であるか、契約に従っていない場合は、例外をスローする必要があります。 呼び出し元が先に進むことを許可すると、多くの問題を引き起こす可能性のある不良データでオブジェクトが構築されることを知ってフローを進めることは得策ではありません。
常に「早く失敗し、早く失敗する」ことをお勧めします
オブジェクトをインスタンス化する前にパラメーターセットを検証しないのはなぜですか?そうすることで、オブジェクトが確実に作成されるようになります。したがって、障害から発生する可能性のある副作用をすべて除去できます。
コンストラクターでチェックして例外を投げることができることは知っていますが、失敗しないようにコンストラクターを作成することを好みます。オブジェクトをインスタンス化する前にパラメーター検証を実行し、コンストラクターを失敗させることなく例外を投げることができます。また、通常、コンストラクターで新しいオブジェクトをインスタンス化しようとせず、代わりに必要に応じてインスタンス化することを選択します。
ただ私の意見。PHPは多くの自由を提供します-お楽しみください!