PHP Coba Tangkap Contoh: Tutorial Penanganan Exception & Error
Apa itu Pengecualian?
Kesalahan adalah hasil program yang tidak diharapkan yang tidak dapat ditangani oleh program itu sendiri.
Kesalahan diatasi dengan memperbaiki program. Contoh kesalahan adalah loop tak terbatas yang tidak pernah berhenti dijalankan.
Pengecualian adalah hasil program yang tidak diharapkan yang dapat ditangani oleh program itu sendiri.
Contoh pengecualiannya adalah mencoba membuka file yang tidak ada.
Pengecualian ini dapat ditangani dengan membuat berkas atau memberikan opsi kepada pengguna untuk mencari berkas tersebut.
Mengapa menangani pengecualian?
- Hindari hasil yang tidak diharapkan pada halaman kami yang dapat sangat mengganggu atau menjengkelkan pengguna akhir kami
- Tingkatkan keamanan aplikasi kami dengan tidak memaparkan informasi yang mungkin digunakan oleh pengguna jahat untuk menyerang aplikasi kami
- Pengecualian Php digunakan untuk mengubah aliran normal suatu program jika terjadi kesalahan yang dapat diprediksi.
Penanganan Kesalahan PHP
Ketika terjadi kesalahan, bergantung pada pengaturan konfigurasi Anda, PHP menampilkan pesan kesalahan di browser web dengan informasi terkait kesalahan yang terjadi.
PHP menawarkan sejumlah cara untuk menangani kesalahan.
Kita akan melihat tiga (3) metode yang umum digunakan;
- Pernyataan mati– fungsi die menggabungkan fungsi echo dan exit menjadi satu. Ini sangat berguna ketika kita ingin mengeluarkan pesan dan menghentikan eksekusi skrip ketika terjadi kesalahan.
- Penangan kesalahan khusus – ini adalah fungsi yang ditentukan pengguna yang dipanggil setiap kali terjadi kesalahan.
- Pelaporan kesalahan PHP – pesan kesalahan tergantung pada pengaturan pelaporan kesalahan PHP Anda. Metode ini sangat berguna dalam lingkungan pengembangan ketika Anda tidak tahu apa yang menyebabkan kesalahan tersebut. Informasi yang ditampilkan dapat membantu Anda men-debug aplikasi Anda.
Contoh penanganan kesalahan
Sekarang mari kita lihat beberapa contoh sederhana dengan rutinitas penanganan kesalahan.
Misalkan kita telah mengembangkan sebuah aplikasi yang menggunakan file teks untuk menyimpan data. Kita mungkin ingin memeriksa keberadaan file sebelum mencoba membaca data darinya.
Kode di bawah mengimplementasikan contoh di atas.
<?php $denominator = 0; echo 2 / $denominator; ?>
Dengan asumsi Anda menyimpan file simple_error.php di folder phptuts, buka URL-nya http://localhost/phptuts/simple_error.php
Anda akan mendapatkan hasil berikut ini
Seperti yang terlihat dari hasil di atas, membuat aplikasi kita terlihat tidak profesional dan dapat mengganggu pengguna.
Kami akan memodifikasi kode di atas dan menulis penangan kesalahan untuk aplikasi tersebut
<?php $denominator = 0; if ($denominator != 0) { echo 2 / $denominator; } else { echo "cannot divide by zero (0)"; } ?>
Dengan asumsi Anda menyimpan kode di atas sebagai error_handling.php, buka URL-nya http://localhost/phptuts/error_handling.php
Catatan: ini adalah praktik keamanan yang baik untuk menampilkan pesan seperti yang ditunjukkan di atas daripada menampilkan pesan seperti “File tidak ditemukan”.
Mari kita lihat contoh lain yang menggunakan penangan kesalahan khusus.
Penangan kesalahan khusus akan ditetapkan sebagai fungsi penanganan kesalahan PHP default dan pada dasarnya akan menampilkan nomor dan pesan kesalahan.
Kode di bawah ini mengilustrasikan implementasi contoh di atas
<?php function my_error_handler($error_no, $error_msg) { echo "Opps, something went wrong:"; echo "Error number: [$error_no]"; echo "Error Description: [$error_msg]"; } set_error_handler("my_error_handler"); echo (5 / 0); ?>
Buka URL-nya http://localhost/phptuts/custom_error_handler.php Anda akan mendapatkan hasil berikut ini
Seperti yang dapat Anda lihat dari contoh di atas, penangan kesalahan khusus sangat ampuh dalam artian itu
- Mereka memungkinkan kami menyesuaikan pesan kesalahan.
- Penanganan kesalahan khusus juga dapat mencakup pencatatan kesalahan dalam suatu file/basis data, pengiriman email ke pengembang, dan lain-lain.
Sekarang mari kita lihat jenis penanganan kesalahan yang ketiga. Kita akan menggunakan fungsi bawaan PHP yaitu error_reporting. Fungsi ini memiliki sintaks dasar sebagai berikut
<?php error_reporting($reporting_level); ?>
SINI,
- “error_reporting” adalah fungsi pelaporan kesalahan PHP
- “$reporting_level” bersifat opsional, dapat digunakan untuk mengatur tingkat pelaporan. Jika tidak ada tingkat pelaporan yang ditentukan, PHP akan menggunakan tingkat pelaporan kesalahan default seperti yang ditentukan dalam file php.ini.
Tingkat Pelaporan | Uraian Teknis | Example |
---|---|---|
PERINGATAN E_ | Hanya menampilkan pesan peringatan. Tidak menghentikan eksekusi skrip | error_reporting(E_WARNING); |
E_NOTICE | Menampilkan pemberitahuan yang dapat terjadi selama eksekusi normal suatu program atau dapat berupa kesalahan. | error_reporting(E_ PEMBERITAHUAN); |
E_USER_ERROR | Menampilkan kesalahan yang dibuat pengguna, yaitu penangan kesalahan khusus | error_reporting(E_ USER_ERROR); |
E_USER_PERINGATAN | Menampilkan pesan peringatan yang dibuat pengguna | error_reporting(E_USER_WARNING); |
E_USER_NOTICE | Menampilkan pemberitahuan yang dibuat pengguna | error_reporting(E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Menampilkan error yang tidak fatal dan dapat ditangani menggunakan custom error handler | error_reporting(E_RECOVERABLE_ERROR); |
E_SEMUA | Menampilkan semua kesalahan dan peringatan | error_reporting(E_ SEMUA); |
Perbedaan antara Kesalahan dan Pengecualian
- Pengecualian diberikan dan dimaksudkan untuk ditangkap sementara kesalahan umumnya tidak dapat dipulihkan.
- Pengecualian ditangani dengan cara berorientasi objek. Ini berarti ketika pengecualian dilemparkan, objek pengecualian dibuat yang berisi rincian pengecualian.
Tabel di bawah menunjukkan metode objek pengecualian
metode | Uraian Teknis | Example |
---|---|---|
dapatkan Pesan() | Menampilkan pesan pengecualian |
<?php echo $e->getMessage(); ?> |
ambil kode() | Menampilkan kode numerik yang mewakili pengecualian |
<?php echo $e->getCode(); ?> |
dapatkan File() | Menampilkan nama file dan jalur tempat pengecualian terjadi |
<?php echo $e->getFile(); ?> |
dapatkanGaris() | Menampilkan nomor baris tempat pengecualian terjadi |
<?php echo $e->getLine(); ?> |
dapatkan Jejak() | Menampilkan array penelusuran balik sebelum pengecualian |
<?php print_r( $e->getTrace()); ?> |
dapatkan Sebelumnya() | Menampilkan pengecualian sebelumnya sebelum pengecualian saat ini |
<?php echo $e->getPrevious(); ?> |
dapatkanTraceAsString() | Menampilkan penelusuran balik pengecualian sebagai string, bukan array |
<?php echo $e->getTraceAsString(); ?> |
__toString() | Menampilkan seluruh pengecualian sebagai string |
<?php echo $e->__toString(); ?> |
Berikut adalah sintaksis dasar untuk melempar pengecualian.
<?php throw new Exception("This is an exception example"); ?>
SINI,
- "melempar" adalah kata kunci yang digunakan untuk melempar pengecualian
- “Pengecualian baru(…)” membuat objek pengecualian dan meneruskan string “Ini adalah contoh pengecualian” sebagai parameter pesan.
Kode di atas menghasilkan pesan berikut.
Kita sekarang akan melihat contoh yang mengimplementasikan pengecualian lempar dan tangkap.
Kami akan memodifikasi contoh di atas dan menyertakan coba, lempar, dan tangkap.
Ia memiliki sintaksis dasar sebagai berikut.
<?php try { //code goes here that could potentially throw an exception } catch (Exception $e) { //exception handling code goes here } ?>
SINI,
- “try{…}” adalah blok kode yang akan dieksekusi yang berpotensi memunculkan pengecualian
- “catch(Exception $e){…}” adalah blok kode yang menangkap pengecualian yang dilempar dan menetapkan objek pengecualian ke variabel $e.
Kode di bawah ini menunjukkan contoh pengecualian dasar dengan penerapan pengecualian coba, lempar, dan tangkap.
Program ini dengan sengaja memunculkan pengecualian yang kemudian ditangkapnya.
<?php try { $var_msg = "This is an exception example"; throw new Exception($var_msg); } catch (Exception $e) { echo "Message: " . $e->getMessage(); echo ""; echo "getCode(): " . $e->getCode(); echo ""; echo "__toString(): " . $e->__toString(); } ?>
Buka URL-nya http://localhost/phptuts/exception_handling.php Anda akan mendapatkan hasil berikut.
Dimungkinkan juga untuk membuat beberapa pengecualian untuk satu pernyataan try php tergantung pada jenis pengecualian yang diberikan.
Lihat artikel di MySQL, Akses data PHP… untuk contoh implementasi beberapa pengecualian
Beberapa Pengecualian
Pengecualian berganda menggunakan beberapa blok coba tangkap untuk menangani pengecualian yang dilempar. Beberapa pengecualian berguna ketika;
- Anda ingin menampilkan pesan yang disesuaikan tergantung pada pengecualian yang diberikan
- Anda ingin melakukan operasi unik tergantung pada pengecualian yang dilemparkan
Diagram alur di bawah mengilustrasikan cara kerja beberapa pengecualian
Mari kita lihat contoh yang menggunakan banyak pengecualian.
Kami akan memodifikasi kode yang membagi angka dengan penyebut yang diteruskan.
Kami memperkirakan akan terjadi dua jenis pengecualian;
- Pembagian dengan nol
- Pembagian dengan angka negatif
Demi kesederhanaan, kami hanya akan menampilkan tipe pengecualian di blok tangkapan kami.
Kelas Pengecualian bawaan PHP digunakan untuk melemparkan pengecualian.
Kita akan membuat dua kelas yang memperluas kelas pengecualian dan menggunakannya untuk melemparkan pengecualian.
Kode di bawah ini menunjukkan implementasinya.
<?php class DivideByZeroException extends Exception {}; class DivideByNegativeException extends Exception {}; function process($denominator) { try { if ($denominator == 0) { throw new DivideByZeroException(); } else if ($denominator < 0) { throw new DivideByNegativeException(); } else { echo 25 / $denominator; } } catch (DivideByZeroException $ex) { echo "DIVIDE BY ZERO EXCEPTION!"; } catch (DivideByNegativeException $ex) { echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!"; } catch (Exception $x) { echo "UNKNOWN EXCEPTION!"; } } process(0); ?>
Menguji kode
Kami berasumsi Anda menyimpan multiple_Exceptions.php di folder phptuts.
Telusuri ke URL http://localhost/phptuts/multiple_exceptions.php
Beralih kembali ke file PHP dan berikan -1 sebagai parameter seperti yang ditunjukkan dalam diagram berikut.
Telusuri ke URL http://localhost/phptuts/multiple_exceptions.php.
Hasil apa yang Anda dapatkan? Lewati 3 sebagai parameter.
Hasil apa yang Anda dapatkan?
Ringkasan
- Kesalahan adalah hasil tak terduga yang dihasilkan oleh kode PHP
- Penanganan kesalahan meningkatkan kinerja aplikasi
- PHP memiliki fungsi bawaan yang dapat digunakan untuk menyesuaikan cara PHP melaporkan kesalahan
- Pengecualian itu seperti kesalahan, tetapi bisa ditangkap menggunakan blok catch saat dilempar.
- Menampilkan pesan kesalahan yang menampilkan informasi kesalahan dianggap sebagai praktik keamanan yang buruk.