Istisnolarni qayta ishlash

O'tkan darsimizda biz xatolarni qayta ishlash bo'yicha o'tgan edik. Endi, istisno va xatolik o'rtasida qanday farq bor degan savol tug'ilishi tabiiy.

PHP 5 da yangi obyektda yo'naltirilgan xatolarni qayta ishlash usuli Istisnolar deb tanishtirilgan.

Exception handling(istisnolarni qayta ishlash) - kod bajarilishi to'xtagan joyda sodir bo'lgan "beo'xshov" xatolar haqidagi xabarni ekranga chiqarish uchun ishlatiladi.

try va catch blokini ishlatish

try bloki ichida jingalak qavslar ichida istisno yoki xatoga olib keladigan kod qismi bo'ladi, agar hech qanday istisnoga duch kelmasa kod odatiy tarzda bajariladi, istisno sodir bo'lgan holatlarda kod bajarilishi try blokidan chiqib, catch blokiga kiradi.

Quyidagi misol istisnoni qayta ishlash uchun try va catch'ni ishlatilish sintaksisi:

<?php
    
try {
    //istisnoga olib keladigan kod qismi ketadi
}
catch (Exception $e) {
    //istisnoni qayta ishlash kod qismi
}
    
?>

throw istisnosi

Agar kerak bo'lsa biz istisnolarni qo'lda ham chiqarishimiz mumkin. Bunda bizga throw kalit so'zi yordam beradi. Exception(istisno) bu PHP sinf bo'lib, PHPdagi barcha exception classes(istisno sinflar) uchun parent class(ota sinf) hisoblanadi.

Istisnoni chiqarish uchun biz istisno sinfining obyektini yaratib olamiz va istisnoni chiqarish uchun throw kalit so'zidan foydalanamiz.

Keling, namunani ko'rib chiqamiz:

<?php
    // funciton declaration
    function triggerException() {
        // using throw keyword
        throw new Exception("Manually triggering exception...");
    }
    
?>

Agar biz yuqoridagi triggerException() funksiyasini chaqrisak, istisno xabarini chiqaradi.

Endi try blok ichidan funksiyani chaqirib olamiz va catch bloki ichida istisnoni qayta ishlay olamiz. Xuddi shunday:

<?php
    
try {
    // funksiya chaqirildi
    triggerException();
}
catch (Exception $e) {
    echo "Oops! Some unexpected error occured...";
}
    
?>

Oops! Some unexpected error occured...

catch bloki ichida biz exception obyektimizdagi xabarni olishimiz uchun getMessage() metodidan foydalanishimiz mumkin.

 

Custom Exception Class(Maxsus istisno sinf)

Biz PHP da keltirilgan Exception class dan meros olish orqali maxsus istisno sinfini yaratishimiz mumkin.

Quyida maxsus istisno sinfi uchun namuna mavjud:

<?php
    // custom exception class
    class Tutorialsuz extends Exception {
    
        // constructor belgilash
        function __construct() {
            argumentlarni kiritishimiz mumkin, xohlasek
        }
        
        // agar kerak bo'lsa klass metodlarni yozishimiz mumkin
        
    }
    
?>

Maxsus istisno sinflar agar sizda maxsus xatolari qayta ishlash uchun talablar mavjud bo'lsa, misol uchun xatoni bazaga joylashtirish kerak bo'lsa juda foydali.

Bir nechta istisnolarni qayta ishlash

Agar bitta kod qismi turli xil istisnolarni keltirib chiqarsa, istisnoni turiga asoslanib ba'zi harakatlarni amalga oshirishimiz mumkin bo'ladi, bunday holatlarda biz bir nechta catch bloklarini ishlatamiz:

<?php
    
try {
    // calling the function
    triggerException();
}
catch (Tutorialsuz $e) {
    // bu yerda nimadir bajariladi...
}
catch (Exception $e) {
    echo "Oops! Some unexpected error occured...";
}
    
?>

Bir necha catch bloklar orqali ko'p istisnolarni qayta ishlashda esda qolishi kerak bo'lgan muhim nuqtalar:

  1. Exception sinfi qayta ishlayotgan catch blok bloklarni oxirida joylashishi kerak.
  2. catch blok qayta ishlayotgan Exception sinfi boshqa istisnolarni ham qayta ishlashi mumkin, shu bilan birga barcha istisno sinflar Exception sinfning child sinflari hisoblanadi.