PHP - Penanganan Kesalahan & Pengecualian
Penanganan kesalahan adalah proses menangkap kesalahan yang muncul dari program Anda dan kemudian mengambil tindakan yang sesuai. Jika Anda menangani kesalahan dengan benar maka itu dapat menyebabkan banyak konsekuensi yang tidak terduga.
Sangat sederhana dalam PHP untuk menangani kesalahan.
Menggunakan fungsi die ()
Saat menulis program PHP Anda, Anda harus memeriksa semua kemungkinan kondisi kesalahan sebelum melanjutkan dan mengambil tindakan yang sesuai bila diperlukan.
Coba contoh berikut tanpa harus /tmp/test.xt mengajukan dan dengan file ini.
<?php
if(!file_exists("/tmp/test.txt")) {
die("File not found");
}else {
$file = fopen("/tmp/test.txt","r");
print "Opend file sucessfully";
}
// Test of the code here.
?>
Dengan cara ini Anda dapat menulis kode yang efisien. Dengan menggunakan teknik di atas, Anda dapat menghentikan program Anda setiap kali terjadi kesalahan dan menampilkan pesan yang lebih bermakna dan ramah pengguna.
Menentukan Fungsi Penanganan Kesalahan Kustom
Anda dapat menulis fungsi Anda sendiri untuk menangani kesalahan apa pun. PHP memberi Anda kerangka kerja untuk menentukan fungsi penanganan kesalahan.
Fungsi ini harus mampu menangani minimal dua parameter (tingkat kesalahan dan pesan kesalahan) tetapi dapat menerima hingga lima parameter (opsional: file, nomor baris, dan konteks kesalahan) -
Sintaksis
error_function(error_level,error_message, error_file,error_line,error_context);
Sr Tidak | Parameter & Deskripsi |
---|---|
1 | error_level Diperlukan - Menentukan tingkat laporan kesalahan untuk kesalahan yang ditentukan pengguna. Harus berupa angka nilai. |
2 | error_message Diperlukan - Menentukan pesan kesalahan untuk kesalahan yang ditentukan pengguna |
3 | error_file Opsional - Menentukan nama file di mana kesalahan terjadi |
4 | error_line Opsional - Menentukan nomor baris di mana kesalahan terjadi |
5 | error_context Opsional - Menentukan larik yang berisi setiap variabel dan nilainya digunakan saat kesalahan terjadi |
Kemungkinan tingkat kesalahan
Tingkat laporan kesalahan ini adalah jenis kesalahan berbeda yang dapat digunakan oleh penangan kesalahan yang ditentukan pengguna. Kabin nilai ini digunakan dalam kombinasi menggunakan| operator
Sr Tidak | Konstan & Deskripsi | Nilai |
---|---|---|
1 | .E_ERROR Error run-time yang fatal. Eksekusi skrip dihentikan |
1 |
2 | E_WARNING Error run-time yang tidak fatal. Eksekusi skrip tidak dihentikan |
2 |
3 | E_PARSE Kesalahan penguraian waktu kompilasi. Kesalahan parse seharusnya hanya dibuat oleh parser. |
4 |
4 | E_NOTICE Pemberitahuan run-time. Skrip menemukan sesuatu yang mungkin merupakan kesalahan, tetapi bisa juga terjadi saat menjalankan skrip secara normal |
8 |
5 | E_CORE_ERROR Kesalahan fatal yang terjadi selama start-up awal PHP. |
16 |
6 | E_CORE_WARNING Error run-time yang tidak fatal. Ini terjadi selama start-up awal PHP. |
32 |
7 | E_USER_ERROR Kesalahan fatal yang dibuat pengguna. Ini seperti E_ERROR yang diatur oleh programmer menggunakan fungsi PHP trigger_error () |
256 |
8 | E_USER_WARNING Peringatan buatan pengguna yang tidak fatal. Ini seperti E_WARNING yang ditetapkan oleh programmer menggunakan fungsi PHP trigger_error () |
512 |
9 | E_USER_NOTICE Pemberitahuan buatan pengguna. Ini seperti E_NOTICE yang ditetapkan oleh programmer menggunakan fungsi PHP trigger_error () |
1024 |
10 | E_STRICT Pemberitahuan run-time. Aktifkan agar PHP menyarankan perubahan pada kode Anda yang akan memastikan interoperabilitas terbaik dan kompatibilitas penerusan kode Anda. |
2048 |
11 | E_RECOVERABLE_ERROR Kesalahan fatal yang bisa ditangkap. Ini seperti E_ERROR tetapi bisa ditangkap oleh pegangan yang ditentukan pengguna (lihat juga set_error_handler ()) |
4096 |
12 | E_ALL Semua kesalahan dan peringatan, kecuali level E_STRICT (E_STRICT akan menjadi bagian dari E_ALL mulai PHP 6.0) |
8191 |
Semua tingkat kesalahan di atas dapat disetel menggunakan fungsi pustaka bawaan PHP berikut di mana level cab berupa nilai apa pun yang ditentukan dalam tabel di atas.
int error_reporting ( [int $level] )
Berikut adalah cara Anda membuat satu fungsi penanganan kesalahan -
<?php
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
?>
Setelah Anda menentukan penangan kesalahan khusus Anda, Anda perlu mengaturnya menggunakan pustaka bawaan PHP set_error_handlerfungsi. Sekarang mari kita periksa contoh kita dengan memanggil fungsi yang tidak ada.
<?php
error_reporting( E_ERROR );
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
//set error handler
set_error_handler("handleError");
//trigger error
myFunction();
?>
Penanganan Pengecualian
PHP 5 memiliki model pengecualian yang mirip dengan bahasa pemrograman lain. Pengecualian penting dan memberikan kontrol yang lebih baik atas penanganan kesalahan.
Mari kita jelaskan di sana kata kunci baru yang terkait dengan pengecualian.
Try- Fungsi yang menggunakan pengecualian harus berada dalam blok "coba". Jika pengecualian tidak terpicu, kode akan dilanjutkan seperti biasa. Namun jika pengecualian terpicu, pengecualian "dilempar".
Throw- Ini adalah cara Anda memicu pengecualian. Setiap "lemparan" harus memiliki setidaknya satu "tangkapan".
Catch - Blok "catch" mengambil pengecualian dan membuat objek yang berisi informasi pengecualian.
Ketika pengecualian dilemparkan, kode yang mengikuti pernyataan tidak akan dijalankan, dan PHP akan mencoba menemukan blok catch pertama yang cocok. Jika pengecualian tidak tertangkap, Kesalahan Fatal PHP akan dikeluarkan dengan "Pengecualian Tidak Tertangkap ...
Pengecualian dapat dilempar, dan ditangkap ("ditangkap") dalam PHP. Kode mungkin diapit dalam blok percobaan.
Setiap percobaan harus memiliki setidaknya satu blok tangkapan yang sesuai. Beberapa blok tangkapan dapat digunakan untuk menangkap kelas pengecualian yang berbeda.
Pengecualian dapat dilemparkan (atau dilemparkan kembali) dalam blok tangkapan.
Contoh
Berikut ini adalah potongan kode, salin dan tempel kode ini ke dalam file dan verifikasi hasilnya.
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
// Code following an exception is not executed.
echo 'Never executed';
}catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
?>
Dalam contoh di atas $ e-> fungsi getMessage digunakan untuk mendapatkan pesan kesalahan. Ada beberapa fungsi berikut yang dapat digunakanException kelas.
getMessage() - pesan pengecualian
getCode() - kode pengecualian
getFile() - nama file sumber
getLine() - garis sumber
getTrace() - n larik lacak balik ()
getTraceAsString() - string jejak yang diformat
Membuat Custom Exception Handler
Anda dapat menentukan pengendali pengecualian khusus Anda sendiri. Gunakan fungsi berikut untuk menyetel fungsi pengendali pengecualian yang ditentukan pengguna.
string set_exception_handler ( callback $exception_handler )
Sini exception_handleradalah nama fungsi yang akan dipanggil saat terjadi pengecualian yang tidak tertangkap. Fungsi ini harus didefinisikan sebelum memanggil set_exception_handler ().
Contoh
<?php
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>
Periksa set lengkap fungsi penanganan kesalahan di Fungsi Penanganan Kesalahan PHP