Menu Navigasi

Tutorial Tutorial Pemrograman Part 57: Advanced Error Handling dengan Custom Exceptions di PHP

AI Generated
29 Desember 2025
19 views
Tutorial Tutorial Pemrograman Part 57: Advanced Error Handling dengan Custom Exceptions di PHP

Pendahuluan

Selamat datang di part 57 dari seri tutorial pemrograman PHP! Pada bagian ini, kita akan membahas cara meningkatkan penanganan kesalahan (error handling) dalam aplikasi PHP Anda menggunakan custom exceptions. Ini adalah topik tingkat menengah/lanjutan yang sangat penting untuk membangun aplikasi yang robust dan mudah dipelihara. Sebelumnya, kita telah mempelajari tentang Traits. Pengetahuan tentang Traits akan membantu kita membuat struktur class exception yang lebih modular dan reusable. Prasyarat untuk tutorial ini adalah pemahaman dasar tentang konsep OOP (Object-Oriented Programming) di PHP, termasuk class, object, inheritance, dan try-catch blocks.

Flowchart Penanganan Exception

Konsep Dasar: Mengapa Custom Exceptions?

Dalam PHP, exceptions adalah cara untuk menangani kesalahan yang terjadi selama eksekusi program. PHP memiliki built-in exception classes seperti Exception, TypeError, InvalidArgumentException, dan lain-lain. Namun, seringkali kita perlu membuat exception classes sendiri (custom exceptions) untuk merepresentasikan kesalahan yang lebih spesifik untuk domain aplikasi kita.

Analogi Dunia Nyata: Bayangkan Anda sedang membuat aplikasi e-commerce. Jika seorang pengguna mencoba melakukan pembayaran dengan dana yang tidak mencukupi, Anda tidak hanya ingin melempar exception umum. Anda ingin melempar InsufficientFundsException yang secara eksplisit menyatakan masalahnya. Ini memudahkan penanganan kesalahan di bagian lain dari kode Anda.

Hands-on Coding

Mari kita buat custom exception class untuk aplikasi e-commerce kita.

Langkah 1: Membuat Base Exception Class

Pertama, kita akan membuat base exception class yang akan di-extend oleh semua custom exception kita.


<?php

namespace App\Exceptions;

use Exception;

class BaseException extends Exception
{
    public function __construct(string $message = "", int $code = 0, Exception $previous = null)
    {
        parent::__construct($message, $code, $previous);
    }

    public function report(): void
    {
        // Logging atau tindakan lain yang diperlukan.
        error_log("Exception: " . $this->getMessage());
    }
}

Penjelasan Kode:

  • namespace App\Exceptions;: Mendefinisikan namespace untuk exception classes kita.
  • class BaseException extends Exception: Class BaseException mewarisi dari class Exception bawaan PHP.
  • __construct: Constructor untuk exception. Menerima pesan, kode, dan exception sebelumnya (jika ada).
  • report: Method untuk melakukan logging atau tindakan lain saat exception terjadi.

Langkah 2: Membuat Custom Exception: InsufficientFundsException

Sekarang, mari kita buat custom exception untuk kasus dana tidak mencukupi.


<?php

namespace App\Exceptions;

class InsufficientFundsException extends BaseException
{
    public function __construct(string $message = "Insufficient funds available.", int $code = 400, Exception $previous = null)
    {
        parent::__construct($message, $code, $previous);
    }
}

Penjelasan Kode:

  • class InsufficientFundsException extends BaseException: Class InsufficientFundsException mewarisi dari BaseException.
  • Constructor menetapkan pesan default dan kode error HTTP (400) untuk exception ini.

Langkah 3: Menggunakan Custom Exception

Berikut adalah contoh bagaimana Anda dapat menggunakan custom exception ini dalam kode Anda.


<?php

namespace App\Services;

use App\Exceptions\InsufficientFundsException;

class PaymentService
{
    public function processPayment(float $amount, float $userBalance): void
    {
        if ($userBalance < $amount) {
            throw new InsufficientFundsException("Saldo Anda tidak mencukupi untuk melakukan pembayaran ini.");
        }

        // Logika pembayaran lainnya di sini.
        echo "Pembayaran berhasil diproses.\n";
    }
}

// Contoh penggunaan:

$paymentService = new PaymentService();
$userBalance = 50.00;
$amount = 100.00;

try {
    $paymentService->processPayment($amount, $userBalance);
} catch (InsufficientFundsException $e) {
    echo "Terjadi kesalahan: " . $e->getMessage() . "\n";
    $e->report(); // Melakukan logging.
}

Penjelasan Kode:

  • use App\Exceptions\InsufficientFundsException;: Mengimpor custom exception class.
  • throw new InsufficientFundsException(...): Melempar exception jika saldo tidak mencukupi.
  • try...catch: Menangkap exception dan menanganinya.
  • $e->getMessage(): Mendapatkan pesan exception.
  • $e->report(): Memanggil method report untuk melakukan logging.

Common Pitfalls

  • Tidak mewarisi dari Exception atau base exception class: Pastikan custom exception Anda mewarisi dari class yang tepat untuk memastikan kompatibilitas.
  • Tidak memberikan pesan yang informatif: Pesan exception harus jelas dan membantu dalam debugging.
  • Tidak menangani exception dengan benar: Pastikan untuk menggunakan try...catch blocks untuk menangani exception dan mencegah aplikasi crash.

Challenge

Buat custom exception class ProductNotFoundException untuk aplikasi e-commerce kita. Class ini harus dilempar jika suatu produk tidak ditemukan dalam database. Sertakan pesan yang sesuai dan kode error HTTP yang relevan.

Sumber Referensi

Bagikan: