Semua metode berikut digunakan dalam inti Magento sehingga yang mana yang lebih disukai (atau "praktik terbaik" terbaru) cara?
Mage::throwException('Some Message')
- 732 Penggunaanthrow new Exception('Some Message')
- 419 Penggunaanthrow Mage::exception('Vendor_Module', 'Some Message')
- 94 Penggunaan
(perlu membuatVendor_Module_Exception
kelas)
error
best-practice
exception
Salman von Abbas
sumber
sumber
grep -r throwException /path/to/magento/app/code/core | wc -l ; grep -r throw\ new /path/to/magento/app/code/core | wc -l ; grep -r throw\ Mage /path/to/magento/app/code/core | wc -l
- meskipun itu mengharuskan Anda tahu apa yang juga dicari.Jawaban:
Panggilan
Mage::throwException
itu digunakan untuk melemparkan pengecualian dariMage_Core_Exception
varietas tertentu . Ini umumnya digunakan untuk menyajikan pesan kesalahan kepada pengguna akhir. Untuk contoh ini, lakukan pencarian cepatMage::throwException
di modul Mage_Checkout, Anda akan menemukan banyak contoh di mana pesan kesalahan sebenarnya sedang diterjemahkan sebelum dilemparkan, karena pada akhirnya akan ditambahkan ke objek sesi dan ditampilkan kepada pengguna di halaman yang dihasilkan.Menggunakan
new Exception
atau sesuatu sepertinew My_Custom_Exception
biasanya akan menjadi tempat Anda melemparkan kesalahan internal ke aplikasi, kesalahan yang kemungkinan besar tidak boleh ditampilkan kepada pengguna akhir. Mungkin Anda menangkap ini dan menanganinya dengan anggun (penggunaan yang baik untuk jenis pengecualian khusus dalam beberapa kasus), atau di lain waktu mereka berakhir tertangkap, dicatat dan diakhiri permintaan dengan pesan kesalahan yang lebih umum ditampilkan kepada pengguna.Saya tidak pernah secara pribadi menggunakan
Mage::exception
tetapi tampaknya merupakan upaya untuk pola memiliki tipe pengecualian unik untuk setiap modul. Tidak akan ada salahnya dilakukan dalam menggunakannya, karena pada dasarnya ini adalah pabrik yang mengembalikan contoh pengecualian untuk modul yang diberikan, meskipun (pada saat penulisan ini) tidak menerapkan dukungan untuk hal-hal seperti penimpaan.sumber
Mage::throwException('my error message')
kelas pembantu saya tetapi tidak ada yang terjadi ??Anda telah melakukan bagian yang sulit, mencari tahu seberapa sering mereka digunakan :)
tl; dr: IMHO, Anda harus
Mage::throwException
paling sering menggunakan , kembali keMage::exception
saat Anda perlu menaikkan jenis pengecualian dari luar ruang lingkup modul Anda, jika tanpa alasan lain selain kemampuan pesan sesi dan fakta bahwa Anda tidak harus mengetikthrow new
di depannya.Berikut rinciannya:
Mage::throwException
pada dasarnya adalah pembungkus untukMage_Core_Exception($message)
dengan fungsionalitas tambahan karena dapat menambahkan pengecualian ke sesi melaluigetSingleton
panggilan yang dirantaiaddMessage
new Exception()
adalah cara inti PHP untuk melempar pengecualian, tetapi mengharuskan Anda untuk menggunakanthrow
kata kunci dan mungkin sedikit lebih besar "performan" karena dua lainnya adalah pembungkus dengan fungsionalitas tambahan.Mage::exception
adalah pembungkus juga, tetapi memiliki manfaat memungkinkan Anda untuk membuat instance kelas pengecualian Anda sendiri. Ini sangat membantu jika Anda seorang pengembang plugin dan perlu membuat log khusus untuk pengecualian, secara terpisah, tanpa fungsi yanglogException
menyediakan (mis., Tidak ada stack trac) atau ingin membuat panggilan API dengan pengecualian, dll. Ini juga berguna saat Anda inginthrow
pengecualian dari tipe kelas yang berbeda, misalnya, apa yang terjadi diMage_Paypal
, sering meningkatkanMage_Core
jenis pengecualian.sumber
new Exception()
danMage::exception()
tidak jelas bagi saya yang terbaik. Ketika saya melihat ke dalamMage::exception()
kode, saya tidak melihat apa manfaat lebihthrow $exception
, itu benar-benar menghalangi Anda untuk memilih kelas pengecualian Anda telah dikonfigurasi standar auto-loading dalam (/ an Anda) ekstensi seperti prefiks ClassName, menghalangi analisis statis dan tidak memungkinkan Anda untuk memanggil metode tambahan dengan pengecualian itu melempar langsung.