Last Updated on October 30, 2021 by
Bagi Anda yang sudah pernah membaca serial Codekey tentang Java, Anda mungkin tidak asing dengan istilah try and catch. Pada PHP juga disediakan exception Try and Catch, seperti pada Java. Exception PHP adalah hasil program yang tidak diharapkan yang dapat ditangani oleh program itu sendiri.
Contoh exception termasuk mencoba membuka file yang tidak ada. Exception ini dapat ditangani dengan membuat file atau memberikan opsi kepada pengguna untuk mencari file tersebut. Untuk itu, pada artikel kali ini Codekey akan membahas tuntas tentang Exception pada PHP.
Table of Contents
Exception PHP : Apa itu?
Meskipun Anda sudah terbiasa dengan penanganan error PHP, menghentikan skrip tidak selalu merupakan solusi terbaik. PHP 5 memperkenalkan cara baru untuk mengelola kesalahan, yang disebut PHP coba tangkap dan buang metode dan Exception.
Exception PHP adalah error tertentu yang dapat ditangkap dan ditangani oleh sistem. Artinya, Anda dapat membuat eksekusi kode berlanjut meskipun error terdeteksi. Prinsip penanganan Exception PHP berbeda dengan penanganan error PHP karena berorientasi objek (berdasarkan pembuatan objek yang berisi data dan fungsi).
Dengan Exception dan manipulasinya, Anda dapat mengubah alur normal skrip Anda jika terjadi error tertentu. Fungsi coba tangkap PHP akan membuat cara untuk mencegah kode berhenti ketika menghadapi masalah.
Beberapa exception yang ada di PHP contohnya adalah try dan catch. Exception diperkenalkan di PHP versi 5, ketika penanganan kesalahan standar terbukti tidak cukup untuk kasus-kasus tertentu. Fungsi utama yang digunakan untuk menangani Exception adalah PHP try catch and throw.
Cara Menggunakan Exception PHP
Dalam menggunakan exception di PHP, ada beberapa cara yang harus Anda ketahui. Biasanya, ketika Exception dipicu, sistem melakukan langkah-langkah berikut:
– Menyimpan status skrip saat ini.
– Mengalihkan eksekusi ke fungsi yang ditentukan sebelumnya untuk penanganan Exception.
– Langkah selanjutnya tergantung pada situasi spesifik. Penangan dapat melanjutkan eksekusi dari status skrip yang disimpan sebelumnya, menghentikan aliran kode seluruhnya atau terus berpindah dari baris kode yang berbeda.
Dalam tutorial ini, kami akan mendemonstrasikan metode berikut dalam menggunakan Exception PHP untuk menangani kesalahan. Di sini, yang perlu Anda catat adalah, Exception secara khusus dimaksudkan untuk penanganan kesalahan PHP, bukan untuk beralih ke poin lain dalam skrip.
Berikut ini adalah contoh penggunaan dasar exception.
Penggunaan Dasar Exception PHP
Setelah mengeluarkan Exception, PHP akan menghentikan aliran skrip normal dan mencari blok catch () pertama yang ditemuinya, yang akan dieksekusi.
Jika tidak ada blok kode seperti itu, kesalahan fatal akan terjadi, dengan pesan “Uncaught Error”. Cobalah untuk melempar (throw) Exception PHP tanpa pernyataan catch ():
<?php //membuat fungsi yang akan memberikan exception function check_num($number) { if($number>1) { throw new Exception("Nilai harus lebih kecil dari 1"); } return true; } //memicu exception check_num(3); ?>
Anda akan melihat pesan seperti berikut ini:
Fatal error: Uncaught exception 'Exception' with message Nilai harus lebih kecil dari 1' in C:\webfolder\test.php:6 Stack trace: #0 C:\webfolder\test.php(12): checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6
Try, Throw, dan Catch
Jika kita tidak ingin aplikasi web kita crash setiap kali ada Exception, kita harus menulis skrip untuk menangani Exception tersebut. Skrip yang dijalankan dengan benar untuk menangani Exception harus mencakup:
– try
Try adalah blok untuk bagian kode di mana Exception mungkin terjadi. Jika Exception tidak terpicu, kode akan berjalan seperti biasa. Jika ya, itu dibuang.
– throw
Throw adalah blok yang digunakan untuk memicu Exception. Setiap lemparan harus memiliki setidaknya satu blok catch.
– catch
blok ini mengambil Exception dan menghasilkan objek yang menyimpan datanya.
Pada contoh di bawah ini Anda dapat melihat pemicu Exception (kami memiliki semua blok kode yang diperlukan):
<?php //membuat function yang mengandung potensi terjadinya exception function checkNumber($number) { if($number > 1) { throw new Exception('Nilai harus lebih kecil sama dengan 1'); } return true; } //memicu munculnya exception pada fungsi try try { checkNumber(2); //pada kasus ini exception akan terlempar dan memunculkan pesan berikut echo 'Nilai harus lebih kecil sama dengan 1'; } catch(Exception $e) { //mengambil nilai dari exception echo 'Message: ' .$e->getMessage(); } ?>
Berikut ini adalah pesan error yang akan Anda dapatkan.
Message: Nilai harus lebih kecil sama dengan 1
Selanjutnya, kami akan menjelaskan contoh kode di atas. Dalam contoh di atas, kami melemparkan Exception dan menanganinya dengan blok catch (). Berikut ini adalah uraian prosesnya.
- Fungsi yang disebut check_num () didefinisikan. Tugasnya adalah untuk memeriksa apakah suatu nilai lebih besar dari 1. Jika kondisi ini terpenuhi, kita PHP membuang Exception.
- Fungsi yang baru kita buat dipanggil dalam blok try ().
- Di dalam fungsi, Exception dilempar.
- catch () menerima Exception yang dilempar dan membuat objek bernama $ e yang menyimpan informasi tentang Exception tersebut.
- Kami menggemakan pesan kesalahan dari Exception dengan memanggil $ e-> getMessage () dari objek, yang berisi data tentang Exception.
Meskipun aturan mengatakan setiap Exception harus memiliki catch (), ada cara untuk mengatasinya. Untuk melakukan itu, kita harus belajar bagaimana mendefinisikan kelas penangan Exception tingkat atas.
Mengkustomisasi Kelas Exception
Untuk membuat exception Handler khusus, Anda harus membuat kelas, berisi fungsi yang dimaksudkan untuk menangani Exception dalam PHP setelah dipicu.
Kelas ini harus menjadi ekstensi kelas Exception. Ini akan memiliki semua properti asli dari kelas Exception, tetapi Anda dapat menyediakannya dengan fungsi khusus.
Anda dapat melihat cara membuat kelas Exception khusus pada contoh di bawah ini:
<?php class customException extends Exception { public function error_message() { //mendefinisikan pesan error $error_msg = 'Error caught on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is no valid E-Mail address'; return $error_msg; } } $email = "someonesomeone@example...com"; try { //mengecek if if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { //melempar exception jika email yang dimasukkan tidak Valid throw new customException($email); } } catch (customException $e) { //memunculkan pesan error echo $e->error_message(); } ?>
Kelas baru ini adalah salinan yang hampir identik dari kelas Exception asli. Namun, sekarang ini memiliki fungsi error_message () yang dapat dikustom. Karena ia memiliki semua metode dan properti kelas asli, kita dapat menggunakan setiap fungsi yang terdapat dalam kelas Exception normal, seperti GetLine (), GetFile (), GetMessage ().
Contoh kode di atas adalah melempar exception, yang mana ia ditangkap menggunakan exception class khusus yang dikustom.
- Kelas custom_exception () dibuat sebagai perpanjangan dari kelas asli, mewarisi setiap properti dan metode dari aslinya.
- Fungsi error_message () dibuat. Dengan menggunakan fungsi ini, kami membuat kode mengembalikan pesan kesalahan jika alamat email tidak valid.
- $ email adalah sebuah string, yang bukan merupakan alamat email yang valid.
- Sebuah blok try () dijalankan dan Exception dilemparkan.
- Blok catch () menampilkan pesan kesalahan.
Dengan menggunakan beberapa Exception, Anda dapat memeriksa beberapa kondisi sekaligus. Untuk melakukan itu, Anda harus menggunakan beberapa blok kode if..else, sakelar, atau beberapa Exception. Perlu diingat bahwa setiap Exception ini dapat menggunakan kelasnya sendiri dan menampilkan pesan kesalahannya. Berikut contohnya:
<?php class customException extends Exception { public function error_message() { //pesan error $error_msg = 'Error caught on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is no valid E-Mail address'; return $error_msg; } } $email = "sepasep@asep.com"; try { //mengecek perintah if if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { //melempar exception, semisal kesalahan throw new customException($email); } //mengecek isi email yang memiliki "example" if(strpos($email, "asep") !== FALSE) { throw new Exception("$email mengandung kata'asep'"); } } catch (customException $e) { echo $e->error_message(); } catch(Exception $e) { echo $e->getMessage(); } ?>
Dalam contoh di atas, Anda dapat melihat bahwa dua kondisi tertentu diuji. Jika keduanya tidak terpenuhi, Exception akan dilemparkan:
- Kelas custom_exception () dibuat sebagai perpanjangan dari kelas asli, mewarisi setiap properti dan metode dari aslinya.
- Fungsi error_message () dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat email tidak valid.
- $ email adalah string, yang merupakan alamat email yang valid, berisi contoh kata.
- Blok try () dijalankan, tetapi Exception tidak dilemparkan.
- Saat memeriksa kondisi kedua, Exception dilemparkan, karena variabel $ email berisi contoh nilai string.
- Blok catch () menampilkan pesan kesalahan.
Jika Exception yang dilempar adalah milik kelas custom_exception yang tidak memiliki tangkapan khusus, tangkapan Exception dasar akan menangani Exception.
Melempar Ulang Exception
Terkadang, saat melontarkan Exception, Anda mungkin ingin menanganinya dengan cara yang berbeda dari cara standar. Anda bisa melempar Exception lagi di dalam blok catch () Anda.
Skrip tersebut dimaksudkan untuk menyembunyikan kesalahan sistem dari pengguna aplikasi web. Pembuat kode mungkin ingin mengetahui kesalahan sistem, tetapi pengguna tidak (dan tidak seharusnya) peduli tentang itu. Jika Anda ingin membuat pesan kesalahan ramah pengguna, Anda dapat membuang kembali Exception untuk mengubah pesan seperti contoh berikut ini:
Contoh kode di atas menguji apakah alamat email yang dimasukkan memiliki contoh string sebagai nilainya. Jika string ditemukan, Exception akan ditampilkan kembali:
<?php class customException extends Exception { public function error_message() { //pesan error $error_msg = 'Error caught on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is no valid E-Mail address'; return $error_msg; } } $email = "sepasep@asep.com"; try { //mengecek perintah if if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { //melempar exception, semisal kesalahan throw new customException($email); } //mengecek isi email yang memiliki "example" if(strpos($email, "asep") !== FALSE) { throw new Exception("$email mengandung kata'asep'"); } } catch (customException $e) { echo $e->error_message(); } catch(Exception $e) { echo $e->getMessage(); } ?>
Berikut penjelasan tentang kode di atas. Contoh kode di atas menguji apakah alamat email yang dimasukkan memiliki contoh string sebagai nilainya. Jika string ditemukan, Exception akan ditampilkan kembali:
- Kelas custom_exception () dibuat sebagai perpanjangan dari kelas asli, mewarisi setiap properti dan metode dari aslinya.
- Fungsi error_message () dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat email tidak valid
- $ email adalah string, yang merupakan alamat email yang valid, berisi contoh kata.
- Try () berisi blok try () lain, yang digunakan untuk membuang kembali Exception kami.
- Exception diberikan karena variabel $ email berisi contoh nilai string.
- Exception ditangkap, dan custom_exception kemudian dilemparkan.
- Exception ini menampilkan pesan kesalahan ramah pengguna.
Jika Exception tidak berjalan ke blok catch () di blok try () saat ini, ia mungkin mencari catch () di level yang lebih tinggi.
Kemudian, kami akan menjelaskan exception handler tingkat tinggi. Fungsi yang disebut set_exception_handler () membuat fungsi yang ditentukan pengguna dimaksudkan untuk menangani setiap Exception yang tidak tertangkap. Lihatlah contoh berikut ini.
<?php function myException($exception) { echo "<b>Exception : </b> " . $exception->getMessage(); } set_exception_handler('myException'); throw new Exception('Tidak ada Exception yang didapat');?>
Kode ini akan menghasilkan output:
Exception : Tidak ada Exception yang didapat
Perlu Anda catat, kode di atas tidak memiliki blok catch(). Seluruh exception ditangani dengan exception tingkat atas yang sudah diatur.
Itulah penjelasan tentang Exception PHP yang harus Anda pahami. Menangani exception PHP cukup rumit, sehingga Anda perlu mengetahui dasar-dasar PHP terlebih dahulu. Exception pada PHP bisa dilemparkan di blok catch () yang terletak di dalam blok try ().
Perlu Anda ketahui juga, versi PHP sebelumnya yaitu PHP 5 hanya memiliki Error tetapi bukan Exception sehingga Anda memerlukan PHP versi di atas 5 untuk menggunakan exception.
Menangani Exception di PHP hanya menggunakan fungsi try (), catch () dan throw (). Dimungkinkan untuk menggunakan beberapa Exception dan beberapa blok catch () secara bersamaan. Anda dapat menulis sebagian besar skrip di blok try () untuk menangani semua Exception yang mungkin terjadi.
Jika Anda tertarik untuk belajar PHP, Codekey menyediakan berbagai tutorial, pembahasan, materi, tips, dan trik untuk Anda saat bekerja dengan PHP. Kami juga menyediakan tutorial untuk bahasa pemrograman lainnya. Jangan lupa untuk dapatkan update terbaru dari situs Codekey.
Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.