PHP - Ekscepsi

Interface Throwable

Dalam PHP, ekscepsi adalah objek yang mewakili kondisi yang tidak biasa. Mereka dilempar saat terjadi kesalahan khusus dalam kode Anda. PHP menyediakan interface Throwable, yang adalah kelas dasar untuk semua ekscepsi dan kesalahan. Itu memiliki beberapa metode yang memungkinkan Anda menangani ekscepsi secara efektif.

PHP - Exceptions

Penanganan Ekscepsi Dasar

Untuk menangani ekscepsi dalam PHP, Anda dapat menggunakan blok try-catch. Berikut adalah contoh:

<?php
try {
// Kode yang mungkin lempar ekscepsi
throw new Exception("Terjadi kesalahan!");
} catch (Exception $e) {
// Kode untuk menangani ekscepsi
echo "Ekscepsi ditangkap: " . $e->getMessage();
}
?>

Dalam contoh ini, kita menggunakan pernyataan throw untuk membuat objek Exception baru dengan pesan khusus. Jika ekscepsi dilempar dalam blok try, eksekusi kode melompat ke blok catch yang sesuai, di mana ekscepsi ditangkap dan ditangani.

set_exception_handler

Fungsi set_exception_handler memungkinkan Anda mendefinisikan fungsi khusus yang akan dipanggil saat terjadi ekscepsi yang belum ditangkap. Fungsi ini harus menerima dua parameter: objek ekscepsi dan boolean yang menunjukkan apakah ekscepsi dilempar saat panggilan ke eval().

Berikut adalah contoh penggunaan set_exception_handler:

<?php
function myExceptionHandler($exception) {
echo "Ekscepsi yang belum ditangkap: " . $exception->getMessage();
}

set_exception_handler('myExceptionHandler');

// Kode yang lempar ekscepsi
throw new Exception("Ups! Ada yang salah.");
?>

Dalam contoh ini, kita mendefinisikan fungsi penanganan ekscepsi khusus yang disebut myExceptionHandler. Kemudian kita gunakan set_exception_handler untuk mengatur fungsi ini sebagai penanganan ekscepsi default. Ketika ekscepsi yang belum ditangkap dilempar, fungsi khusus ini akan dipanggil instead dari defaultnya.

Ekscepsi SPL

PHP menyediakan beberapa kelas ekscepsi bawaan dalam Standard PHP Library (SPL). Kelas ini meng-extend kelas Exception dan memberikan informasi yang lebih spesifik tentang jenis ekscepsi yang berbeda. Beberapa ekscepsi SPL umum termasuk:

  • BadFunctionCallException: Dilempar saat callback merujuk ke fungsi yang belum didefinisikan atau jika beberapa argumen hilang.
  • DomainException: Digunakan untuk kesalahan dalam logika domain aplikasi Anda.
  • InvalidArgumentException: Ditingkatkan saat fungsi diberikan argumen yang tidak diterima.
  • LengthException: Digunakan saat operasi mencoba menggunakan objek dengan panjang yang salah.
  • OutOfBoundsException: Dilempar saat indeks array diluar batas.
  • OutOfRangeException: Ditingkatkan saat nilai tidak dalam rentang yang diharapkan.
  • RangeException: Digunakan saat nilai tidak dalam rentang yang ditentukan.
  • RuntimeException: Ekscepsi umum untuk kesalahan runtime.
  • UnderflowException: Dilempar saat terjadi underflow (misalnya, mengurangi dari stack kosong).
  • UnexpectedValueException: Ditingkatkan saat nilai tidak cocok dengan jenis yang diharapkan.

Anda dapat menggunakan ekscepsi SPL ini dalam kode Anda seperti kelas ekscepsi lainnya. Sebagai contoh:

<?php
function divide($a, $b) {
if ($b == 0) {
throw new DivisionByZeroError("Divisi oleh nol tidak diizinkan.");
}
return $a / $b;
}

try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "Ekscepsi ditangkap: " . $e->getMessage();
}
?>

Ekscepsi yang Didefinisikan Pengguna

Selain menggunakan ekscepsi SPL bawaan, Anda juga dapat membuat kelas ekscepsi khusus Anda sendiri. Untuk melakukan ini, cukup extend kelas Exception dan tambahkan fungsi ekstra yang Anda butuhkan. Berikut adalah contoh:

<?php
class MyCustomException extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
parent::__construct($message, $code, $previous);
}
}

try {
throw new MyCustomException("Ini adalah ekscepsi khusus.");
} catch (MyCustomException $e) {
echo "Ekscepsi khusus ditangkap: " . $e->getMessage();
}
?>

Dalam contoh ini, kita membuat kelas baru yang disebut MyCustomException yang extends kelas Exception. Kemudian kita lempar dan tangkap instance ekscepsi ini seperti halnya ekscepsi lainnya.

Dengan mengikuti panduan ini dan menggunakan alat yang disediakan, Anda dapat menangani ekscepsi dalam kode PHP Anda dan memastikan bahwa aplikasi Anda kokoh dan tahan terhadap kesalahan yang tak terduga. Ingatlah untuk selalu menguji kode Anda secara menyeluruh dan menangani ekscepsi dengan lembut untuk memberikan pengalaman pengguna yang lebih baik.

Credits: Image by storyset