Apa itu Pengecualian?
Dengan PHP 5
datang dengan cara berorientasi objek baru berurusan dengan kesalahan. Penanganan
pengecualian digunakan untuk mengubah aliran normal eksekusi kode jika kesalahan
ditentukan kondisi (biasa) terjadi. Kondisi ini disebut pengecualian.
Apa yang biasanya
terjadi ketika pengecualian dipicu?
1. Code resmi akan disimpan
2. Eksekusi kode akan beralih ke
yang telah ditetapkan (custom) fungsi handler Pengecualian
3. Tergantung pada situasi, handler
kemudian dapat melanjutkan eksekusi dari code resmi disimpan, mengakhiri
eksekusi script atau melanjutkan script dari lokasi yang berbeda dalam kode
Berikut ini
metode penanganan kesalahan yang berbeda:
1. Penggunaan dasar Pengecualian
2. Membuat handler pengecualian
kustom
3. Multiple pengecualian
4. Membuang pengecualian
5. Menetapkan handler
pengecualian tingkat atas
Catatan: Pengecualian hanya
boleh digunakan dengan kondisi kesalahan, dan tidak boleh digunakan untuk
melompat ke tempat lain dalam kode pada titik tertentu.
Penggunaan dasar
Pengecualian
Ketika eksepsi
dilemparkan, kode berikut tidak akan dieksekusi, dan PHP akan mencoba untuk
menemukan pencocokan pada blok "catch". Jika Pengecualian tidak
tertangkap, kesalahan fatal akan diterbitkan dengan "Exception
Uncaught" pesan. Mari kita mencoba untuk melemparkan pengecualian tanpa
penangkapan itu:
<?php
//create function with an exception
function checkNum($number) {
if($number>1) {
throw new
Exception("Value must be 1 or below");
}
return true;
}
//trigger exception
checkNum(2);
?>
Kode di atas akan
mendapatkan error seperti ini:
Fatal error: Uncaught exception 'Exception'
with message 'Value must be 1 or below' 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
Untuk menghindari
kesalahan dari contoh di atas, kita perlu membuat kode yang tepat untuk
menangani pengecualian. Kode pengecualian yang tepat harus mencakup:
1. Try - Fungsi menggunakan
pengecualian harus berada dalam blok "Try" . Jika pengecualian tidak
memicu, kode akan terus seperti biasa. Namun jika pengecualian memicu, eksepsi
"thrown"
2. Throw - ini adalah bagaimana
Anda memicu pengecualian. Setiap " thrown " harus memiliki setidaknya
satu "catch"
3. Catch - sebuah blok "catch"
mengambil pengecualian dan menciptakan sebuah objek yang berisi informasi
pengecualian
Mari kita mencoba
untuk memicu pengecualian dengan kode yang valid:
<?php
//create function with an exception
function checkNum($number) {
if($number>1) {
throw new
Exception("Value must be 1 or below");
}
return true;
}
//trigger exception in a "try" block
try {
checkNum(2);
//If the exception is
thrown, this text will not be shown
echo 'If you see this,
the number is 1 or below';
}
//catch exception
catch(Exception $e) {
echo 'Message: '
.$e->getMessage();
}
?>
Kode di atas akan
mendapatkan error seperti ini:
Message: Value must be 1 or below
Penjelasan :
Kode di atas
melempar pengecualian dan menangkap pengecualian tersebut:
1. Fungsi checkNum () dibuat memeriksa jika nomor lebih
besar dari 1. Jika ya, eksepsi dilemparkan
2. Fungsi checkNum () fungsi
disebut dalam Blok "Try"
3. Pengecualian dalam fungsi checkNum
() dilemparkan
4. Blok "Catch"
mengambil pengecualian dan menciptakan objek ($ e) yang berisi informasi
pengecualian
5. Pesan kesalahan dari
pengecualian bergema dengan memanggil $ e-> getMessage () dari objek
pengecualian
Namun, "setiap
Throw harus memiliki Catch" aturan adalah untuk mengatur penangan tingkat
pengecualian atas untuk menangani kesalahan yang lolos.
Membuat
Kostum Kelas Pengecualian
Membuat handler
pengecualian kustom cukup sederhana. Kami hanya membuat kelas khusus dengan
fungsi yang dapat dipanggil ketika pengecualian terjadi di PHP. Kelas harus
menjadi perpanjangan dari kelas pengecualian. Kustom Kelas pengecualian
mewarisi sifat dari kelas pengecualian PHP dan Anda dapat menambahkan fungsi
kustom untuk itu.
Mari kita membuat
kelas pengecualian:
<?php
class customException extends Exception {
public function
errorMessage() {
//error message
$errorMsg = 'Error on
line '.$this->getLine().' in '.$this->getFile()
.':
<b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example...com";
try {
//check if
if(filter_var($email,
FILTER_VALIDATE_EMAIL) === FALSE) {
//throw exception if
email is not valid
throw new
customException($email);
}
}
catch (customException $e) {
//display custom message
echo
$e->errorMessage();
}
?>
Kelas baru adalah
salinan dari kelas lama pengecualian dengan menampilkan fungsi pesan kesalahan
(). Karena itu adalah salinan dari kelas lama, dan mewarisi properti dan metode
dari kelas lama, kita dapat menggunakan metode kelas pengecualian seperti getline () dan getFile () dan getMessage ().
Penjelasan:
Kode di atas
melempar pengecualian dan menangkap dengan kelas kostum pengecualian :
1. Kelas customException ()
dibuat sebagai perpanjangan dari kelas lama pengecualian. Dengan cara ini
mewarisi semua metode dan properti dari kelas lama pengecualian
2. Fungsi menampilkan pesan
kesalahan () dibuat mengembalikan pesan
kesalahan jika alamat e-mail tidak valid
3. Variabel $ email diatur untuk
string yang bukan alamat e-mail yang valid
4. Blok "Try" dijalankan
dan pengecualian dilemparkan karena alamat e-mail tidak valid
5. Blok "Catch" menangkap
pengecualian dan menampilkan pesan error
Multi
pengecualian
Hal ini
dimungkinkan untuk script untuk menggunakan beberapa pengecualian untuk
memeriksa beberapa kondisi. Hal ini dimungkinkan untuk menggunakan beberapa
blok if..else, switch, atau sarang beberapa pengecualian. Pengecualian ini
dapat menggunakan kelas pengecualian yang berbeda dan kembali pesan kesalahan
yang berbeda:
<?php
class customException extends Exception {
public function
errorMessage() {
//error message
$errorMsg = 'Error on
line '.$this->getLine().' in '.$this->getFile()
.':
<b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example.com";
try {
//check if
if(filter_var($email,
FILTER_VALIDATE_EMAIL) === FALSE) {
//throw exception if
email is not valid
throw new
customException($email);
}
//check for
"example" in mail address
if(strpos($email,
"example") !== FALSE) {
throw new
Exception("$email is an example e-mail");
}
}
catch (customException $e) {
echo
$e->errorMessage();
}
catch(Exception $e) {
echo
$e->getMessage();
}
?>
Penjelasan :
Kode di atas tes
dua kondisi dan melempar perkecualian jika salah satu kondisi tidak terpenuhi:
1. Class customException () dibuat
sebagai perpanjangan dari kelas lama pengecualian. Dengan cara ini mewarisi
semua metode dan properti dari kelas lama pengecualian
2. Fungsi menampilkan pesan
kesalahan () fungsi mengembalikan pesan kesalahan jika alamat e-mail tidak valid
3. Variabel $ email diatur untuk
string yang merupakan alamat e-mail yang valid, tapi mengandung string " example
"
4. Blok "Trya"
dijalankan dan pengecualian tidak dilempar pada kondisi pertama
5. Kondisi kedua memicu
pengecualian karena e-mail berisi string " example "
6. Blok "Catht" menangkap
pengecualian dan menampilkan pesan kesalahan yang benar
Jika pengecualian
dilemparkan adalah dari Class customException dan tidak ada menangkap customException,
hanya menangkap dasar pengecualian, pengecualian akan ditangani di sana.
Re-Throwing
Pengecualian
Kadang-kadang,
ketika pengecualian dilemparkan, Anda mungkin ingin menanganinya berbeda dari
cara standar. Hal ini dimungkinkan untuk membuang pengecualian untuk kedua
kalinya dalam blok "catch". Sebuah skrip harus menyembunyikan
kesalahan sistem dari pengguna. Kesalahan sistem mungkin penting untuk coder,
tetapi tidak menarik bagi pengguna. Untuk membuat segalanya lebih mudah bagi
pengguna Anda dapat membuang-ulang pengecualian dengan pesan user friendly:
<?php
class customException extends Exception {
public function
errorMessage() {
//error message
$errorMsg =
$this->getMessage().' is not a valid E-Mail address.';
return $errorMsg;
}
}
$email = "someone@example.com";
try {
try {
//check for
"example" in mail address
if(strpos($email,
"example") !== FALSE) {
//throw exception if
email is not valid
throw new
Exception($email);
}
}
catch(Exception $e) {
//re-throw exception
throw new
customException($email);
}
}
catch (customException $e) {
//display custom message
echo
$e->errorMessage();
}
?>
Penjelasan :
Kode di atas tes
jika email-address berisi string " example " di dalamnya, jika tidak,
pengecualian kembali dilemparkan-:
1. Class customException () dibuat
sebagai perpanjangan dari kelas lama pengecualian. Dengan cara ini mewarisi
semua metode dan properti dari kelas lama pengecualian
2. Fungsi menampilkan pesan
kesalahan ()dibuat mengembalikan pesan kesalahan jika alamat e-mail tidak valid
3. Variabel $ email diatur untuk
string yang merupakan alamat e-mail yang valid, tapi mengandung string " example
"
4. Blok "Catcha"
berisi lain Blok "Try" untuk memungkinkan untuk kembali membuang
pengecualian
5. Pengecualian dipicu karena
e-mail berisi string " example "
6. Blok "Catch" menangkap
pengecualian dan Re-Throwing "customException"
7. "customException" ditangkap dan
menampilkan pesan kesalahan
Jika pengecualian
tidak tertangkap di saat "mencoba" block, ia akan mencari blok catch
pada "tingkat yang lebih tinggi".
Pelajari Juga tutorial PHP Data Object lainnya berikut ini ;
No comments:
Post a Comment