Berkenaan dengan penanganan Error di PHP - Sejauh yang saya tahu ada 3 gaya:
die()
atauexit()
gaya:$con = mysql_connect("localhost","root","password"); if (!$con) { die('Could not connect: ' . mysql_error()); }
throw Exception
gaya:if (!function_exists('curl_init')) { throw new Exception('need the CURL PHP extension. Recomplie PHP with curl'); }
trigger_error()
gaya:if(!is_array($config) && isset($config)) { trigger_error('Error: config is not an array or is not set', E_USER_ERROR); }
Sekarang, dalam manual PHP ketiga metode tersebut digunakan.
Yang ingin saya ketahui adalah gaya mana yang harus saya pilih & mengapa?
Apakah 3 penurunan ini menggantikan satu sama lain & oleh karena itu dapat digunakan secara bergantian?
Sedikit OT: Apakah hanya saya atau semua orang berpikir opsi penanganan kesalahan PHP terlalu banyak sehingga membingungkan pengembang php?
error-handling
php
CuriousMind
sumber
sumber
Jawaban:
Yang pertama tidak boleh digunakan dalam kode produksi, karena itu mengangkut informasi yang tidak relevan ke pengguna akhir (pengguna tidak dapat melakukan apa pun tentang "Tidak dapat terhubung ke database" ).
Anda melontarkan Pengecualian jika Anda tahu bahwa pada titik kode kritis tertentu, aplikasi Anda bisa gagal dan Anda ingin kode Anda pulih di beberapa tingkat panggilan.
trigger_error()
memungkinkan Anda menyempurnakan pelaporan kesalahan (dengan menggunakan tingkat pesan kesalahan yang berbeda) dan Anda dapat menyembunyikan kesalahan tersebut dari pengguna akhir (menggunakanset_error_handler()
) tetapi tetap menampilkannya kepada Anda selama pengujian.Juga
trigger_error()
dapat menghasilkan pesan non-fatal penting selama pengembangan yang dapat disembunyikan dalam kode produksi menggunakan penangan kesalahan khusus. Anda juga bisa menghasilkan kesalahan fatal (E_USER_ERROR
) tetapi itu tidak dapat dipulihkan. Jika Anda memicu salah satunya, eksekusi program berhenti pada saat itu. Inilah sebabnya, untuk kesalahan fatal, Pengecualian harus digunakan. Dengan cara ini, Anda akan memiliki kontrol lebih besar atas aliran program Anda:Di sini, jika
gather_data()
hanya serak (menggunakanE_USER_ERROR
ataudie()
) ada kemungkinan,INSERT
pernyataan sebelumnya akan berhasil masuk ke database Anda, bahkan jika tidak diinginkan dan Anda tidak memiliki kendali atas apa yang akan terjadi selanjutnya.sumber
trigger_error()
& membuang pengecualian: mana yang harus saya gunakan & kapan?ROLLBACK
. Contoh pseudo-code ini mencakup kedua kasus: server yang tidak dikonfigurasi ke autocommit (COMMIT
pernyataan diperlukan) dan yang melakukannya.query('START TRANSACTION');
?Saya biasanya menggunakan cara pertama untuk debugging sederhana dalam kode pengembangan. Tidak disarankan untuk produksi. Cara terbaik adalah dengan membuat pengecualian, yang dapat Anda tangkap di bagian lain dari program dan melakukan penanganan kesalahan.
Ketiga gaya tersebut bukanlah pengganti drop-in untuk satu sama lain. Yang pertama bukanlah kesalahan sama sekali, tetapi hanya cara untuk menghentikan skrip dan menampilkan beberapa info debugging untuk Anda parse secara manual. Yang kedua bukanlah kesalahan itu sendiri, tetapi akan diubah menjadi kesalahan jika Anda tidak menangkapnya. Yang terakhir adalah memicu kesalahan nyata di mesin PHP yang akan ditangani sesuai dengan konfigurasi lingkungan PHP Anda (dalam beberapa kasus ditunjukkan kepada pengguna, dalam kasus lain hanya masuk ke file atau tidak disimpan sama sekali).
sumber
trigger_error()
hal yang sama terjadi. jadi apa bedanya?