Saya tahu saya bisa melempar pengecualian dari konstruktor dalam PHP tetapi haruskah saya melakukannya? Misalnya, jika nilai parameter tidak seperti yang saya harapkan.
Atau haruskah saya menunda melemparkan pengecualian sampai suatu metode dipanggil. Apa kelebihan dan kekurangan dalam kedua kasus?
php
object-oriented
exceptions
exception-handling
WordsWorth
sumber
sumber
Jawaban:
Mengapa Anda menunda melempar pengecualian?
Jika Anda tahu bahwa objek tidak dapat membuat instance dengan benar dengan parameter yang diberikan, maka Anda harus melempar pengecualian.
Jika tidak, seseorang mungkin menguji objek Anda untuk null, yang tidak akan, dan dapat menganggap semuanya berjalan seperti yang diharapkan.
Ada banyak hal yang dapat dilakukan untuk objek Anda tanpa memanggil metode di atasnya: itu dapat ditambahkan ke daftar, dapat dibandingkan, dapat dikirim sebagai parameter, dll dll. Semua ini adalah hal-hal yang seharusnya tidak terjadi, mengingat itu bukan objek yang valid.
sumber
Jika konstruktor Anda dipanggil dengan parameter buruk maka Anda harus (harus?) Melempar pengecualian. Jika tidak maka Anda bisa mendapatkan objek buruk yang tidak akan berperilaku seperti yang diharapkan.
sumber
Benar!!
Anda harus membuang pengecualian jika parameter untuk membangun objek tidak valid atau tidak sesuai kontrak. Ini bukan ide yang baik untuk melanjutkan aliran mengetahui bahwa objek dibangun dengan data yang buruk yang dapat menyebabkan banyak masalah jika Anda membiarkan penelepon melanjutkan.
Itu selalu lebih baik untuk "GAGAL CEPAT DAN GAGAL AWAL"
sumber
Itu adalah satu-satunya cara waras untuk menginformasikan bahwa konstruksi objek gagal.
sumber
Mengapa Anda tidak memvalidasi set parameter sebelum membuat instance objek Anda? Melakukan hal itu akan memastikan bahwa objek Anda akan dibuat, dengan demikian, menghilangkan salah satu sisi yang mempengaruhi yang mungkin terjadi dari kegagalannya.
Meskipun saya tahu Anda dapat memeriksa hal-hal di konstruktor Anda dan melemparkan pengecualian, saya lebih suka menulis konstruktor saya sedemikian rupa sehingga mereka tidak gagal. Saya melakukan validasi parameter sebelum membuat objek yang kemudian saya dapat melemparkan pengecualian tanpa konstruktor saya gagal. Saya juga umumnya tidak mencoba untuk instantiate objek baru di konstruktor saya, sebagai gantinya memilih untuk instantiate mereka yang saya butuhkan.
Hanya pendapat saya saja. PHP menawarkan banyak kebebasan - selamat menikmati!
sumber