Anda di halaman 1dari 2

Exception (pengecualian)

PHP memiliki model pengecualian yang mirip dengan bahasa pemrograman


lainnya. Pengecualian dapat berupa thrown, dan ditangkap (" catched") dalam PHP. Kode
dapat dikelilingi dalam satu tryblok, untuk memfasilitasi penangkapan pengecualian
potensial. Masing try- masing harus memiliki setidaknya satu yang
sesuai catchatau finallyblok.

Jika pengecualian dilemparkan dan cakupan fungsinya saat ini tidak memiliki catch blok,
pengecualian akan "menggelembungkan" tumpukan panggilan ke fungsi panggilan hingga
menemukan catchblok yang cocok . Semua finallyblok yang ditemuinya di sepanjang jalan
akan dieksekusi. Jika tumpukan panggilan dibatalkan sepenuhnya ke lingkup global tanpa
menemui catchblok yang cocok , program akan berakhir dengan kesalahan fatal kecuali jika
penangan pengecualian global telah ditetapkan.

Objek yang dilempar harus merupakan turunan dari kelas Exception atau subclass


dari Exception . Mencoba melempar objek yang tidak akan menghasilkan PHP Fatal Error.

Pada PHP 8.0.0, throwkata kunci adalah ekspresi dan dapat digunakan dalam konteks
ekspresi apa pun. Dalam versi sebelumnya itu adalah pernyataan dan harus berada di jalurnya
sendiri.

catch

Sebuah catchblok mendefinisikan bagaimana menanggapi pengecualian yang


dilemparkan. Sebuah catch blok mendefinisikan satu atau lebih jenis pengecualian atau
kesalahan yang dapat ditanganinya, dan secara opsional sebuah variabel untuk menetapkan
pengecualian. (Variabel diperlukan sebelum PHP 8.0.0.) catchBlok pertama yang dilempar
pengecualian atau pertemuan kesalahan yang cocok dengan jenis objek yang dilempar akan
menangani objek.

Beberapa catchblok dapat digunakan untuk menangkap kelas pengecualian yang


berbeda. Eksekusi normal (ketika tidak ada pengecualian yang dilemparkan ke
dalam try blok) akan berlanjut setelah catchblok terakhir yang ditentukan secara
berurutan. Pengecualian dapat thrown (atau dilemparkan kembali) dalam satu catchblok. Jika
tidak, eksekusi akan dilanjutkan setelah catchblok yang dipicu.

Ketika pengecualian dilemparkan, kode yang mengikuti pernyataan tidak akan dieksekusi,
dan PHP akan mencoba menemukan catchblok pertama yang cocok . Jika pengecualian tidak
tertangkap, PHP Fatal Error akan diberikan dengan pesan " Uncaught Exception ...", kecuali
jika handler telah didefinisikan dengan set_exception_handler() .

Pada PHP 7.1.0, sebuah catchblok dapat menentukan beberapa pengecualian menggunakan


karakter pipa ( |). Ini berguna ketika pengecualian yang berbeda dari hierarki kelas yang
berbeda ditangani dengan cara yang sama.
Pada PHP 8.0.0, nama variabel untuk pengecualian yang tertangkap adalah opsional. Jika
tidak ditentukan, catchblok akan tetap dijalankan tetapi tidak akan memiliki akses ke objek
yang dilempar.

finally 

Sebuah finallyblok juga dapat ditentukan setelah atau sebagai ganti catchblok. Kode di


dalam finallyblok akan selalu dieksekusi setelah blok tryand catch, terlepas dari apakah
pengecualian telah dilemparkan, dan sebelum eksekusi normal dilanjutkan.

Salah satu interaksi penting adalah antara finallyblok dan returnpernyataan. Jika


sebuah returnpernyataan ditemukan di dalam tryatau di dalam catchblok, finallyblok akan
tetap dieksekusi. Selain itu, returnpernyataan dievaluasi saat ditemui, tetapi hasilnya akan
dikembalikan setelah finallyblok dieksekusi. Selain itu, jika finallyblok juga
berisi returnpernyataan, nilai dari finallyblok akan dikembalikan.

Global exception handler

Jika pengecualian diizinkan untuk menggelembung ke lingkup global, itu mungkin ditangkap
oleh penangan pengecualian global jika disetel. Fungsi set_exception_handler() dapat
mengatur fungsi yang akan dipanggil menggantikan catchblok jika tidak ada blok lain yang
dipanggil. Efeknya pada dasarnya sama seperti jika seluruh program dibungkus
dalam blok try- catchblok dengan fungsi tersebut sebagai file catch.

Catatan :

Fungsi internal PHP terutama menggunakan pelaporan Kesalahan ,


hanya ekstensi berorientasi objek modern yang menggunakan pengecualian. Namun,
kesalahan dapat dengan mudah diterjemahkan ke pengecualian
dengan ErrorException . Namun, teknik ini hanya berfungsi dengan kesalahan yang tidak
fatal.

Anda mungkin juga menyukai