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