Penggunaan fungsi CQTCH di PHP

Catatan. Pengecualian hanya boleh digunakan dengan kondisi kesalahan, dan tidak boleh digunakan untuk melompat ke tempat lain dalam kode pada titik tertentu


Penggunaan kebijakan Pengecualian

Ketika pengecualian dilemparkan, kode berikut tidak akan dieksekusi, dan PHP akan mencoba menemukan blok "catch" yang cocok.

Jika pengecualian tidak tertangkap, kesalahan fatal akan dikeluarkan dengan pesan "Pengecualian Tidak Tertangkap" .

Mari kita coba membuang pengecualian tanpa menangkapnya

// buat fungsi dengan pengecualian
fungsi checkNum($angka) {
jika($angka>1) {
throw new Exception("Nilai harus 1 atau lebih rendah");
}
kembali benar;
}

// memicu pengecualian
checkNum(2);
?>

Kode di atas akan mendapatkan error seperti ini

Kesalahan fatal. Pengecualian yang tidak tertangkap 'Pengecualian'
dengan pesan 'Nilai harus 1 atau di bawah' di C. \webfolder\tes. php. 6
Jejak tumpukan. #0 C. \webfolder\tes. php(12)
checkNum(28) #1 {main} dilempar ke dalam C. \webfolder\tes. php online 6

Cobalah, lempar dan tangkap

Untuk menghindari error dari contoh di atas, kita perlu membuat kode yang tepat untuk menangani exception tersebut

Kode pengecualian yang tepat harus disertakan

  1. Coba - Fungsi yang menggunakan pengecualian harus berada di dalam blok "coba" . Jika pengecualian tidak terpicu, kode akan dilanjutkan seperti biasa. Namun jika pengecualian dipicu, pengecualian "thrown"
  2. Throwing - Inilah cara Anda memicu pengecualian. Setiap "throw" harus memiliki setidaknya satu "catch"
  3. Catch - Blok "catch" menangkap pengecualian dan membuat objek yang berisi informasi pengecualian

Mari coba memicu pengecualian dengan kode yang valid

// buat fungsi dengan pengecualian
fungsi checkNum($angka) {
jika($angka>1) {
throw new Exception("Nilai harus 1 atau lebih rendah");
}
kembali benar;
}

// memicu pengecualian dalam blok "coba".
mencoba {
checkNum(2);
//Jika pengecualian dilemparkan, teks ini tidak akan ditampilkan
echo 'Jika Anda melihat ini, angkanya 1 atau lebih rendah';
}

//menangkap pengecualian
catch(Pengecualian $e) {
gema 'Pesan. '. $e->getMessage();
}
?>

Kode di atas akan mendapatkan error seperti ini

Pesan. Nilai harus 1 atau lebih rendah

Sebuah contoh menjelaskan

Kode di atas melempar pengecualian dan menangkapnya

  1. Fungsi checkNum() dibuat. Ini memeriksa apakah jumlahnya lebih besar dari 1. Jika demikian, pengecualian dilemparkan
  2. Fungsi checkNum() dipanggil dalam "try" blokir
  3. Pengecualian dalam checkNum() fungsi dilemparkan
  4. Blok "catch" menangkap pengecualian dan membuat objek ($e) yang berisi informasi pengecualian
  5. Pesan kesalahan dari pengecualian digaungkan dengan memanggil $e-> getMessage() dari objek pengecualian< /a>

Namun, salah satu cara untuk menyiasati aturan "setiap lemparan harus memiliki tangkapan" adalah dengan menyetel penangan pengecualian tingkat atas untuk ditangani kesalahan yang lolos.


Membuat Kelas Pengecualian Khusus

Untuk membuat penangan pengecualian khusus Anda harus membuat kelas khusus dengan fungsi yang dapat dipanggil saat terjadi pengecualian di PHP. kelas harus merupakan perpanjangan dari kelas pengecualian

Kelas pengecualian khusus mewarisi properti dari kelas pengecualian PHP dan Anda dapat menambahkan fungsi khusus untuknya

Mari buat kelas pengecualian

kelas customException memperluas Pengecualian {
fungsi publik errorMessage() {
//pesan eror
$errorMsg = 'Kesalahan pada baris'. $ini->getLine(). 'di dalam'. $ini->getFile()
. '. '.$this->getMessage().' bukan alamat email yang valid';
return $errorMsg;
}
}

$email = "[email dilindungi]";

mencoba {
// periksa apakah
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
// lempar pengecualian jika email tidak valid
lempar customException($email);
}
}

catch (customException $e) {
//menampilkan pesan khusus
echo $e->errorMessage();
}
?>

Kelas baru adalah salinan dari kelas pengecualian lama dengan penambahan fungsi errorMessage() . Karena merupakan salinan dari kelas lama, dan mewarisi properti dan metode dari kelas lama, kita dapat menggunakan metode kelas pengecualian seperti getLine() dan getFile() dan getMessage() .

Sebuah contoh menjelaskan

Kode di atas melempar pengecualian dan menangkapnya dengan kelas pengecualian khusus

  1. customException() dibuat sebagai perpanjangan dari kelas pengecualian lama. metode ini mewarisi semua metode dan properti dari kelas exception
  2. Fungsi errorMessage() dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat email tidak valid
  3. Variabel $email diatur ke string yang bukan merupakan alamat email yang valid
  4. Blok "coba" dijalankan dan pengecualian dilemparkan karena alamat email tidak valid
  5. Blok "catch" menangkap pengecualian dan menampilkan pesan kesalahan

beberapa pengecualian

Skrip dapat menggunakan beberapa pengecualian untuk memeriksa beberapa kondisi

Dimungkinkan untuk menggunakan banyak blok if. lain, beralih, atau membuat beberapa pengecualian. Pengecualian ini dapat menggunakan kelas pengecualian yang berbeda dan mengembalikan pesan kesalahan yang berbeda

kelas customException memperluas Pengecualian {
fungsi publik errorMessage() {
//pesan eror
$errorMsg = 'Kesalahan pada baris'. $ini->getLine(). 'di dalam'. $ini->getFile()
. '. '.$this->getMessage().' bukan alamat email yang valid';
return $errorMsg;
}
}

$email = "[email dilindungi]";

mencoba {
// periksa apakah
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
// lempar pengecualian jika email tidak valid
lempar customException($email);
}
// periksa "contoh" di alamat surat
if(strpos($email, "contoh"). == SALAH) {
throw new Exception("$email adalah contoh email");
}
}

catch (customException $e) {
echo $e->errorMessage();
}

catch(Pengecualian $e) {
echo $e->getMessage();
}
?>

Sebuah contoh menjelaskan

Kode di atas menguji dua kondisi dan melontarkan pengecualian jika salah satu kondisi tidak terpenuhi

  1. customException() dibuat sebagai perpanjangan dari kelas pengecualian lama. metode ini mewarisi semua metode dan properti dari kelas exception
  2. Fungsi errorMessage() dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat email tidak valid
  3. Variabel $ email disetel ke string yang merupakan alamat email yang valid, tetapi berisi string "contoh"
  4. Blok "coba" dijalankan dan pengecualian tidak dilontarkan pada kondisi pertama
  5. Kondisi kedua memicu pengecualian karena email berisi string "contoh"
  6. Blok "catch" menangkap pengecualian dan menampilkan pesan kesalahan yang benar

Jika pengecualian yang dilontarkan berasal dari kelas customException dan tidak ada tangkapan customException, hanya tangkapan pengecualian kebijakan, pengecualian akan ditangani di sana


Mengembalikan Pengecualian

Kadang-kadang, ketika sebuah pengecualian dilemparkan, Anda mungkin ingin menanganinya secara berbeda dari cara standar. Dimungkinkan untuk membuang pengecualian untuk kedua kalinya dalam blok "catch" .

Skrip harus menyembunyikan kesalahan sistem dari pengguna. Kesalahan sistem mungkin penting bagi pembuat kode, tetapi tidak menarik bagi pengguna. Untuk mempermudah pengguna, Anda dapat kembali melempar pengecualian dengan pesan ramah pengguna

Apa fungsi tangkapannya?

catch memungkinkan untuk menangani kesalahan runtime . Ini benar-benar memungkinkan untuk "mencoba" menjalankan kode dan "menangkap" kesalahan yang mungkin terjadi di dalamnya.

Apa fungsi mencoba dan menangkap?

Tujuan dari blok try-catch adalah untuk menangkap dan menangani pengecualian yang dihasilkan oleh kode yang berfungsi .

Kapan try catch digunakan?

Untuk mengatasi error di Java , sebuah pernyataan yang disebut try digunakan. menangkap. Pernyataan tersebut digunakan untuk memblokir eksekusi yang menampilkan error dan dapat membuat program terus berjalan tanpa dihentikan secara langsung.

Apa pengecualian dalam PHP?

Exception secara bahasa berarti pengecualian. Sedangkan dalam istilah PHP adalah perubahan alur program dari kondisi normal ke kondisi tertentu (atau pengecualian tertentu) jika terjadi error ( pengecualian ).