Exception Handling

"Menangkap Error Sebelum Aplikasi Menyerah"

Object-Oriented Programming (OOP) PHP

Pertemuan 11

Tujuan Pembelajaran

  • Mahasiswa memahami konsep Exception sebagai mekanisme pertahanan aplikasi saat terjadi kondisi tidak normal.
  • Mahasiswa mampu menggunakan blok kode try, catch, dan finally.
  • Mahasiswa mengetahui cara melempar error menggunakan keyword throw.
  • Mahasiswa mampu membuat Custom Exception Class untuk mengelompokkan jenis error secara spesifik.

Masalah di Dunia Nyata (Analogi)

Bayangkan Anda membuat sistem yang rumit, lalu ada satu kesalahan kecil (misalnya, koneksi database terputus atau file tidak ditemukan). Tanpa penanganan yang baik, aplikasi PHP Anda akan memunculkan Fatal Error dan halaman web menjadi putih (Blank Screen of Death).

🚚 Analogi: Kurir Pengantar Paket
Jika kurir tidak menemukan alamat pelanggan (terjadi Error), apakah dia membakar truknya dan berhenti bekerja secara tiba-tiba (Aplikasi Crash)? Tentu tidak!

Kurir akan:
  1. Mencoba (Try) mencari alamat tersebut.
  2. Melempar laporan (Throw) jika alamat tidak ada.
  3. Kantor pusat Menangkap laporan (Catch) dan memberi pesan maaf ke pelanggan.
Truk tetap aman, operasional tetap berjalan. Inilah Exception Handling!

4 Kata Kunci Utama

Dalam PHP OOP, penanganan Exception berputar pada 4 kata kunci utama:

  • try : Membungkus (blok) kode yang berpotensi menghasilkan error. "Coba jalankan kode ini...".
  • throw : Keyword untuk melempar/memicu objek Exception ketika suatu kondisi tidak wajar terpenuhi.
  • catch : Menangkap objek yang dilempar dari try dan menentukan apa yang harus dilakukan selanjutnya (misal: tampilkan pesan error yang ramah pengguna).
  • finally : (Opsional) Blok kode yang pasti akan dieksekusi baik terjadi error maupun tidak. Biasanya dipakai untuk menutup koneksi database.

Sintaks Dasar: Membagi dengan Nol

Secara logis, pembagian dengan angka nol (0) tidak terdefinisi dan akan membuat program error. Kita akan menangkapnya!

<?php function bagiAngka($a, $b) { if ($b == 0) { // Memicu (lempar) error jika pembaginya 0 throw new Exception("Tidak bisa membagi dengan nol!"); } return $a / $b; } try { echo bagiAngka(10, 0); echo "Baris ini tidak akan pernah dieksekusi."; } catch (Exception $e) { // Menangkap error dan menampilkan pesannya echo "Terjadi Kesalahan: " . $e->getMessage(); } finally { echo " Blok eksekusi selesai."; } // Output: Terjadi Kesalahan: Tidak bisa membagi dengan nol! Blok eksekusi selesai.

Multiple Catch (Menangkap Berbagai Jenis Error)

Kadang, dalam satu proses bisa terjadi bermacam-macam error. PHP menyediakan berbagai tipe Exception bawaan, dan kita bisa menangkapnya satu persatu layaknya jaring ikan dengan lubang berbeda.

try { // ... kode untuk mengupload gambar ... } catch (TypeError $e) { echo "Tipe data tidak sesuai: gambar harus berupa string URL."; } catch (InvalidArgumentException $e) { echo "Format gambar tidak didukung (harus JPG/PNG)."; } catch (Exception $e) { // Tangkapan jaring terakhir (jika error tidak diketahui) echo "Terjadi error sistem: " . $e->getMessage(); }

*Aturan penting: Letakkan Exception spesifik di atas, dan Exception global (jaring terakhir) di paling bawah blok catch.

Custom Exception (Membuat Error Sendiri)

Untuk aplikasi yang lebih profesional, kita tidak hanya mengandalkan Exception bawaan PHP. Kita bisa membuat class Error kita sendiri dengan melakukan extends Exception.

// 1. Membuat class error khusus class SaldoTidakCukupException extends Exception { public function peringatanWarnaMerah() { return "<span style='color:red'>[CRITICAL] " . $this->getMessage() . "</span>"; } } // 2. Menggunakannya try { $saldo = 50000; $tarik = 100000; if ($tarik > $saldo) { throw new SaldoTidakCukupException("Saldo Anda Kurang!"); } } catch (SaldoTidakCukupException $e) { echo $e->peringatanWarnaMerah(); }

Simulasi: Mesin ATM Sederhana

Uji coba alur try-catch-finally di bawah ini. Saldo di ATM adalah Rp 100.000. Cobalah tarik tunai dengan jumlah yang lebih kecil, lalu cobalah dengan jumlah yang lebih besar!

Menunggu proses transaksi...

Kesimpulan

Tanpa Exception Handling, satu kesalahan kecil bisa membuat seluruh aplikasi mati lemas.

Dengan menggunakan blok try-catch, kita mengubah "Fatal Error" yang mematikan menjadi "Peringatan Terkontrol" yang elegan. Aplikasi menjadi jauh lebih kuat (robust) dan pengguna akan mendapatkan informasi error yang jauh lebih ramah.