FAJAR SUSILO

HI, Welcome to my personal website

Global Exception Handler di PHP

Author: Fajar Susilo
Published At:Jum`at, 2 Agustus 2024, 21:8 WIB

pada post ini saya akan sharing bagimana caranya membuat Global Exception Handler pada php.

Global exception handler di sini bisa di artikan sama seperti kita menggunakan try catch, namun ini secara global.


function sum($number1, $number2)
{
    if (! is_numeric($number1) && !is_numeric($number2)){
        throw new Exception('number1 dan number 2 harus berupa angka yang valid.');
    }
    return $number1 + $number2;
}

try {
    echo sum('not a number', 'not a number');
} catch (Exception $e) {
    echo $e->getMessage();
 //  output : 'number1 dan number 2 harus berupa angka yang valid. '
}

perhatikan kode di atas.

saya membuat sebuah function sum, dimana function tersebut akan mengembalikan hasil penjumlahan dari nilai parameter $number1 dan $number2.

di mana sebelum melakukan penjumlahan saya melakukan validasi terlebih dahulu. jika $number1 dan $number2 bukan sebuah angka yang valid, maka program melemparkan sebuah object Exception. nantinya ketika memanggil function sum kita menggunakan try catch. dan outputnya adalah ‘number1 dan number 2 harus berupa angka yang valid’

lantas, bagaimana jika tidak menggunakan try catch ?

function sum($number1, $number2)
{
    if (! is_numeric($number1) && !is_numeric($number2)){
        throw new Exception('number1 dan number 2 harus berupa angka yang valid.');
    }
    return $number1 + $number2;
}

echo sum('not a number', 'not a number');
// output : 'PHP Fatal error:  Uncaught Exception: number1 dan number 2 harus berupa angka yang valid. in /home/dhenfie'...

ternyata jika terdapat exception yang di throw dan tidak tertangkap akan menyebabkan error.

di dalam php terdapat sebuah function set_exception_handler() yang bisa kita gunakan untuk menangani exception yang tidak tertangkap.

sedikit catatan. di PHP 7 ke atas ada sedikit perubahan pada internal Error Handling (Penanganan Error). di mana sebagian besar Error yang terjadi akan di lempar class Error.

function set_exception_handler() membutuhkan satu parameter berupa callback, di mana ketika terjadi Exception yang tidak tertangkap, callback akan di panggil.

sebagai contoh .

set_exception_handler(function(Throwable $e){
    echo 'Terjadi exception: '. $e->getMessage();
});

function sum($number1, $number2)
{
    if (! is_numeric($number1) && !is_numeric($number2)){
        throw new Exception('number1 dan number 2 harus berupa angka yang valid.');
    }
    return $number1 + $number2;
}

echo sum('not a number', 'not a number');

kode di atas akan menampilkan output ”terjadi exception : number1 dan number 2 harus berupa angka yang valid.’

kita juga bisa menampilkan detail Exception

set_exception_handler(function(Throwable $e){
    echo 'Terjadi exception: '. $e->getMessage(). "\n";
    echo 'file : '. $e->getFile(). "\n";
    echo 'line : '. $e->getLine();
});

function sum($number1, $number2)
{
    if (! is_numeric($number1) && !is_numeric($number2)){
        throw new Exception('number1 dan number 2 harus berupa angka yang valid.');
    }
    return $number1 + $number2;
}

echo sum('not a number', 'not a number');

karena ‘Throwable’ adalah sebuah interface dan class Exception adalah implementasinya maka kita bisa memanggil method yang ada di class Exception, seperti getLine(), getMesage() dan lain lain.

oh ya untuk contoh implementasi real dari set_exception_handler() adalah library Whoops. Whoops sendiri adalah library yang di gunakan untuk menampilkan ‘pesan error’ yang lebih elegan.

dalam prateknya, Whoops sendiri tidak hanya memanfaatkan function set_exception_handler() tetapi juga fungsi ** set_error_handler().

saya juga sempat membuat library serupa namun ini lebih sederhana. repository nya ada github https://github.com/dhenfie/error-handler.

oke mungkin cukup sekian artikel dari saya, semoga bermanfaat.