Menu Navigasi

Tutorial Tutorial Pemrograman Part 58: Advanced Error Handling with Custom Exception Classes in PHP

AI Generated
28 Desember 2025
20 views
Tutorial Tutorial Pemrograman Part 58: Advanced Error Handling with Custom Exception Classes in PHP

Pendahuluan

Selamat datang di bagian ke-58 dari seri tutorial pemrograman PHP kita! Di bagian ini, kita akan menyelami dunia advanced error handling dengan menggunakan custom exception classes. Error handling yang baik sangat penting untuk membuat aplikasi yang robust dan mudah dipelihara. Kita akan melangkah lebih jauh dari sekadar menggunakan exception bawaan PHP. Sebelum melanjutkan, pastikan Anda memahami konsep dasar exception dan try-catch blocks. Sebaiknya Anda juga sudah familiar dengan 'Mastering PHP Namespaces for Code Organization' karena kita akan menggunakannya untuk mengorganisir exception class kita.

Konsep Dasar: Custom Exception Classes

Bayangkan Anda sedang membangun sebuah rumah. Jika tukang batu melakukan kesalahan (misalnya, salah menghitung jumlah batu bata), itu adalah sebuah kesalahan. PHP exceptions berfungsi seperti alarm yang berbunyi saat terjadi kesalahan. Namun, exception bawaan PHP mungkin tidak cukup spesifik untuk kebutuhan aplikasi Anda. Custom exception classes memungkinkan Anda membuat alarm yang lebih spesifik, yang membawa informasi lebih detail tentang jenis kesalahan yang terjadi. Analogi sederhananya, exception bawaan seperti alarm kebakaran umum, sedangkan custom exception seperti alarm yang membedakan antara kebakaran kompor dan kebakaran korsleting listrik.

Mengapa Custom Exception Classes?

  • Lebih Spesifik: Memberikan informasi yang lebih detail tentang kesalahan.
  • Code Organization: Memungkinkan grouping dan penanganan kesalahan berdasarkan kategori.
  • Type Hinting: Memungkinkan Anda melakukan type hinting pada catch blocks untuk menangkap exception tertentu saja.

Hands-on Coding: Membuat Custom Exception Classes

Mari kita buat custom exception class untuk menangani kesalahan terkait database. Kita akan menggunakan namespace untuk mengorganisir kode kita.

Langkah 1: Membuat Namespace dan Class

Buat sebuah file bernama DatabaseException.php di dalam folder src/Exceptions. Asumsikan struktur direktori Anda seperti ini:


project/
├── src/
│   ├── Exceptions/
│   │   └── DatabaseException.php
│   └── ...
└── ...

Isi file DatabaseException.php dengan kode berikut:


 $this->code,
            'error_message' => $this->message,
            'timestamp' => date('Y-m-d H:i:s'),
        ];
    }
}

Penjelasan Kode:

  • namespace MyApp\Exceptions;: Mendefinisikan namespace untuk exception class kita.
  • use Exception;: Mengimpor class Exception bawaan PHP.
  • class DatabaseException extends Exception: Membuat class DatabaseException yang mewarisi dari class Exception.
  • __construct(): Constructor untuk class exception. Menerima pesan error, kode error, dan exception sebelumnya (jika ada).
  • getErrorDetails(): Method untuk mendapatkan detail error dalam bentuk array. Ini sangat berguna untuk logging dan debugging.

Langkah 2: Menggunakan Custom Exception

Berikut adalah contoh bagaimana menggunakan DatabaseException:


getErrorDetails();
        error_log("Database Error: " . json_encode($errorDetails));
        echo "Terjadi kesalahan database. Silakan hubungi administrator.";
    } catch (\Exception $e) {
        // Tangani exception lain secara umum
        error_log("General Error: " . $e->getMessage());
        echo "Terjadi kesalahan. Silakan coba lagi nanti.";
    }
}

connectToDatabase('localhost', 'user', 'password', 'mydb');

Penjelasan Kode:

  • use MyApp\Exceptions\DatabaseException;: Mengimpor class DatabaseException dari namespace.
  • try-catch block: Mencoba melakukan koneksi database. Jika gagal, DatabaseException akan di-throw.
  • catch (DatabaseException $e): Menangkap DatabaseException secara spesifik. Ini memungkinkan kita untuk menangani kesalahan database secara berbeda dari kesalahan lainnya.
  • $e->getErrorDetails(): Memanggil method getErrorDetails() untuk mendapatkan detail error.
  • catch (\Exception $e): Menangkap semua exception lain yang tidak tertangkap oleh catch (DatabaseException $e).

Common Pittfalls

  • Tidak menangkap exception sama sekali: Menyebabkan aplikasi crash dan menampilkan pesan error yang tidak informatif kepada pengguna.
  • Menangkap terlalu umum: Menangkap semua exception dengan catch (\Exception $e) dan tidak menangani exception secara spesifik. Ini membuat debugging menjadi sulit.
  • Tidak logging exception: Tidak mencatat detail exception ke dalam log. Ini membuat sulit untuk melacak dan memperbaiki kesalahan.
  • Tidak menggunakan namespace: Membuat kode menjadi tidak terorganisir dan sulit dipelihara.

Challenge

Buat custom exception class untuk menangani kesalahan terkait validasi data (misalnya, ValidationException). Class ini harus memiliki method untuk mendapatkan daftar field yang tidak valid dan pesan error untuk setiap field.

Sumber Referensi

Bagikan: