Bahaya "Lempar" dalam Tandatangan Fungsi
Walaupun mungkin menggoda untuk memasukkan kata kunci "lempar" dalam tandatangan fungsi untuk secara eksplisit mengisytiharkan potensi pengecualian, amalan ini amat tidak digalakkan. Walaupun tujuannya kelihatan mudah, terdapat beberapa sebab teknikal mengapa pendekatan ini dianggap sebagai pilihan yang tidak baik.
Batasan Pengkompil
Satu isu penting timbul daripada ketidakupayaan pengkompil untuk menguatkuasakan spesifikasi pengecualian yang diisytiharkan dalam tandatangan fungsi. Akibatnya, pengkompil tidak boleh mengesahkan bahawa fungsi itu memang akan membuang pengecualian yang ditentukan. Ini membawa kepada tandatangan yang berkemungkinan mengelirukan, kerana fungsi itu sebenarnya mungkin mengeluarkan pengecualian yang berbeza atau tiada langsung.
Ketidakberkesanan Masa Jalanan
Spesifikasi pengecualian diperiksa semasa masa jalan, mengenakan overhed prestasi. Ini amat tidak diingini jika dibandingkan dengan mekanisme pengendalian pengecualian moden yang melakukan pemeriksaan ini dengan lebih cekap pada masa penyusunan.
Pelaksanaan Tidak Konsisten
Spesifikasi pengecualian mempunyai tahap sokongan yang berbeza-beza merentas berbeza penyusun. Sebagai contoh, MSVC sebahagian besarnya mengabaikan spesifikasi pengecualian, kecuali untuk kes khas "throw()", yang ditafsirkan sebagai jaminan bahawa tiada pengecualian akan dilemparkan. Ketidakkonsistenan ini mewujudkan isu khusus platform dan merumitkan kemudahalihan.
Alternatif kepada Spesifikasi Pengecualian
Memandangkan kelemahan menggunakan tandatangan fungsi "buang", adalah disyorkan untuk menerima pakai pendekatan alternatif untuk pengendalian pengecualian. Ini termasuk:
Atas ialah kandungan terperinci Mengapa Anda Perlu Mengelak Menggunakan \'buang\' dalam Tandatangan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!