Kemunculan error saat pengembangan suatu aplikasi adalah sesuatu yang tidak-bisa-tidak. Ia pasti terjadi. Bahkan ketika aplikasi/web yang kita kerjakan sudah rilis pun, error tetap menjadi makanan sehari-hari kita. Ia pasti dan harus muncul. Show
Error apa pun yang muncul, harus ditangani dengan tepat. Baik ketika aplikasi masih dalam pengembangan, lebih-leibh lagi ketika aplikasi telah dilempar ke publik. Penangan standar terhadap suatu error adalah:
Jenis-Jenis Error Pada PHPDi dalam PHP, terdapat beberapa jenis dan tingkatan level error. Sebagiannya error yang sangat fatal sehingga program tidak bisa dilanjutkan, sebagiannya lagi hanya bersifat peringatan sehinggax` program masih bisa dilanjutkan. Berikut ini beberapa diantara level dan jenis error yang harus diketahui pada PHP: KonstantaDeskripsiLevelE_ERRORError fatal yang terjadi saat run-time program. Eksekusi skrip akan langsung dihentikan1E_WARNINGError non-fatal yang terjadi saat run-time. Skrip (setelah terjadi error) tetap dieksekusi2E_PARSEError yang terjadi pada saat compile-time. Error parse ini terjadi ketika interpreter PHP mendeteksi adanya sintaks error.4E_NOTICEPemberitahuan kemungkinan error pada saat run-time. Suatu baris program bisa jadi ia normal-normal saja, tapi bisa jadi error pada keadaan tertentu.8E_USER_ERRORError fatal yang terjadi saat run-time program. Sama dengan E_ERROR hanya saja error jenis ini dipicu oleh pemrogram dengan memanggil fungsi 3256E_USER_WARNINGError non-fatal yang terjadi saat run-time. Sama dengan E_WARNING hanya saja error jenis ini dipicu oleh pemrogram dengan memanggil fungsi 3512E_USER_NOTICEPemberitahuan kemungkinan error pada saat run-time. Sama dengan E_NOTICE hanya saja error jenis ini dipicu oleh pemrogram dengan memanggil fungsi 31024Untuk level error yang lebih lengkap, silakan merujuk ke dokumentasi manual PHP. Cara Penanganan ErrorSetiap kali menulis kode program, kita harus selalu membuat pemeriksaan pada setiap kemungkinan terjadinya error. Sehingga jika memang terjadi error pada tempat tersebut, kita bisa memberikan aksi yang tepat. Di antara cara penanganan error yang bisa kita lakukan adalah:
Menggunakan Fungsi <?php # sembunyikan semua pesan error bawaan PHP error_reporting(0); /** * Fungsi untuk menangai error. * * Fungsi ini wajib memiliki 4 paramter dan nama parameter bisa bebas. */ function tanganiError ($level, $message, $file, $line) { echo "<div style='padding: 2rem; background: rgba(200, 0, 0, 0.5); color: white'>"; echo "<b>Terjadi Error</b>"; echo "<p>[{$level}] {$message} - {$file}:{$line}</p>"; echo "</div>"; } 6Misalkan kita akan membuka dan membaca suatu file dengan PHP, kita harus memeriksa terlebih dahulu apakah file tersebut tersedia atau tidak. Jika ternyata file tidak tersedia, kita bisa menghentikan run-time program dengan memanggil fungsi 6.Perhatikan kode program berikut:
Pemusatan Error HandlingSelain cara menggunakan 9 seperti di atas, kita bisa melakukan cara yang lebih umum yaitu dengan memusatkan error handling dalam satu fungsi saja.Sehingga setiap kali ada error dari setiap level, fungsi tersebut akan otomatis dipanggil. Setelah itu, kita bisa memutuskan apa yang akan kita lakukan dengan error yang terjadi tersebut. Langkah-langkahnya adalah: 1. Membuat fungsiLangkah yang pertama adalah membuat fungsi khusus untuk menangani error. Fungsi tersebut harus memiliki 5 buah parameter:
Sebelum itu, jangan lupa kita non aktifkan semua pesan error. Karena beberapa pengaturan bawaan PHP di sistem operasi tertentu pesan error akan ditampilkan secara default. Sehingga kita harus mengaturnya mandiri dengan mengubah nilai di file 0 mau pun dengan memanggil fungsi 1.
2. Mengatur fungsi tersebut sebagai error handlerKita telah membuat fungsi 2. Fungsi tersebut menerima 5 buah parameter.Yang harus kita lakukan selanjutnya adalah mengatur fungsi tersebut sebagai error handler. Sehingga jika terjadi error apa pun pada saat run-time, fungsi tersebut akan dieksekusi. Untuk mengatur error handler kita bisa memanggil fungsi bawaan PHP bernama 3.
3. Testing errorKita coba memicu sebuah error dengan memanggil variabel yang tidak pernah kita definisikan sebelumnya.
Setelah program dijalankan, berikut ini output yang saya dapatkan: Menggunakan Shutdown FunctionCara di atas memang sekilas berhasil, akan tetapi cara tersebut tidak berfungsi untuk semua jenis error. Kita telah berusaha memanggil suatu variabel yang belum pernah kita definisikan sebelumnya. Akan tetapi jika kita memanggil sebuah fungsi yang tidak pernah didefinisikan, level error yang dihasilkan adalah: 4. Dan level ini tidak didukung oleh 3. Sehingga fungsi 2 tidak pernah dipanggil.Coba kode program berikut:
Dan setelah dieksekusi, fungsi 2 yang telah kita set sebagai error handler ternyata memang tidak dianggil. Ini tangkapan layar dari apa yang saya dapat:Lalu bagaimana caranya?Agar kita bisa menangani error level 4, kita punya pilihan untuk menggunakan shutdown function.Shutdown function adalah fungsi yang akan dipanggil sesaat ketika program PHP akan selesai. Entah terjadi error 4 atau tidak.Mendaftarkan fungsi anonim sebagai shutdown functionBerikut ini contoh untuk mendaftarkan sebuah fungsi anonim sebagai shutdown function. Fungsi ini akan mengambil error terakhir yang terjadi pada saat run-time, lalu akan memanggil fungsi 2 jika memang ada error.
Coba panggil lagi fungsi 1:
Hasilnya: Sembunyikan Semua Output Ketika Terjadi ErrorKita telah berhasil menangani error 4 menggunakan shutdown function. Akan tetapi, jika kita perhatikan, output apa pun sebelum terjadi error akan tetap ditampilkan.Perhatikan kode program berikut:
Kode program di atas akan menghasilkan output sebagai berikut: Menggunakan fungsi <?php # variabel $tes tidak ada echo $tes; 3 dan <?php # variabel $tes tidak ada echo $tes; 4Fungsi 3 akan menyimpan semua output dalam internal buffer PHP. Sehingga output tidak langsung ditampilkan ke dalam browser melainkan akan ditampilkan terakhir-terakhir menjelang program PHP selesai dieksekusi.Tambahkan fungsi 3 sebelum output pertama, dan panggil fungsi 4 setelah output terakhir.
Panggil fungsi <?php # variabel $tes tidak ada echo $tes; 8 untuk menghapus outputSetelah itu, kita bisa memanggil fungsi 8 untuk menghapus semua output yang terisimpan dalam internal buffer. Dalam artian output tersebut tidak jadi ditampilkan.Fungsi tersebut kita panggil pada saat teradi error:
Ketika program kita jalankan lagi, kita akan dapati semua output sebelum terjadi error, ia tidak ditampilkan. Menangani Sintaks ErrorKita sejauh ini telah berhasil menangani berbagai macam jenis error bahkan sampai fatal error sekalipun. Akan tetapi, kode program yang telah kita buat di atas tidak bisa menangani sintaks error. Misalkan kita menghapus satu tanda titik koma ( 0), program kita akan error dan fungsi penanganan error yang sudah kita buat tidak akan pernah dipanggil meskipun kita sudah membuat shutdown function.Lalu, bagaimana cara mengatasi error 1 alias sintaks error?Caranya sama saja, yang kita perlu tahu adalah:
Langsung saja kita praktikkan, kita akan pecah kode program yang telah kita buat sebelumnya menjadi 3 file sebagai berikut: 0Penjelasan:
Berikut adalah kode program file 2: 1Nah ketika di 4 terdapat error secara sintaks, PHP masih tetap bisa menjalankan file utama yaitu 2 dan shutdown function yang telah kita definisikan di file 3 bisa dijalankan. 2Kode Program LengkapUntuk kode program lengkap pada pertemuan ini bisa anda akses di sini. KesimpulanDi dalam PHP terdapat berbagai jenis level error. Mulai dari yang fatal hingga menghentikan program. Ada yang tidak sampai level tersebut sehingga program masih memungkinkan untuk dilanjutkan. Untuk menangani error pada PHP, terdapat berbagai macam pendekatan. Dalam pertemuan di atas kita telah menggunakan setidaknya 2 buah pendekatan inti:
Tidak hanya itu, kita juga telah berhasil menyembunyikan semua output yang di-echo sebelum terjadinya error memanfaatkan fungsi 3 dan 8.Pembahasan SelanjutnyaPada pembahasan selanjutnya, insyaallah kita masih akan membahas tentang penanganan error. Akan tetapi menggunakan cara yang lebih modern yaitu Exception. Cara ini adalah fitur baru di PHP 5, dan pendekatan ini juga mirip dengan bahasa pemrograman modern lainnya. |