Xatolar bilan ishlash

PHP da xatolarni qayta ishlashni o'rganishdan oldin, biz xatolar nima ekanligini bilib olishimiz kerak.

Error(xatolik) deb biror kod qismida kutilmagan xatolik ro'y berganda yoki noto'g'ri kod sababli to'satdan to'xtab qolishi, misol uchun, nolga bo'lish yoki cheksiz sikl va hakozolarga aytiladi.

PHP da, biz brauzerda xatoliklarni ko'rsatish yoki yashirish uchun PHP konfiguratsiyalarni sozlashimiz mumkin.

PHP'da xatolarni qayta ishlashni turli xil yo'llari mavjud, ulardan:

  1. Koddagi xatolikni boshqarish uchun shartli buyruqlardan yoki die() funksiyasidan foydalanish;
  2. Custom Error Handlers(o'z tomoningizdan qilingan xatoliklar ya'ni tushunarsiz xatolik chiqqanda uni o'zingizga moslab tushunarli qilib modifikatsiya qilish) dan foydalanish
  3. PHP xato haqida axborot berish(error reporting)

Keling, ularni har birini misollar bilan birga ko'rib chiqamiz


die() funksiyasidan foydalanish

die() funksiyasi PHP'da biron-bir xabarni ekranga chiqarish yoki bir xil vaqtda bajarilayotgan skriptdan chiqib ketish uchun ishlatiladi. Agarda biron-bir shartda xatolik aniqlangudek bo'lsa, die() funksiyasini ishlatib ushbu bajarilayotgan skriptdan chiqib ketish mumkin bo'ladi.

Xatolik agar biz biror sonni nolga bo'lganimizda yoki mavjud bo'lmagan faylni ochishga urunganimizda sodir bo'ladi. Keling, die() funksiyasini qanday tarzda xatolikni qayta ishlashini misol tarzda ko'rib chiqamiz:

<?php
    
    $fileName = "noerror.txt";
    // fayl ochilmoqda
    fopen($fileName, "r")
    or die("$fileName faylni ochib bo'lmadi");
    
?>

Yuqoridagi kod parchamizda, agar noerror.txt nomli faylimiz joyda mavjud bo'lmaydigan bo'lsa, "noerror.txt faylni ochib bo'lmadi" degan xabar ekranga chiqadi.

exit() funksiyasi ham die() funksiyasiga o'xshab, bajarilayotgan koddan chiqish uchun ishlatiladi.

Endi keling, qanday qilib shartli buyruqlar orqali xatolarni boshqarishni o'rganishga misol keltiramiz. Xatolikni qayta ishlashning bunday turi ko'pincha o'sha xatolik bo'lishini oldindan bilgan holatda ishlatiladi. Masalan:

<?php
    
    function division($numerator, $denominator) {
        // bo'luv amalini bajarish
        echo $numerator / $denominator;
    }
    
    // funksiyani chaqirish
    division(7, 0);
    
?>

Natija:

Warning: Division by zero...

Bunday holatda, biz ma'lum bir shart xatolik keltirib chiqarishini bilamiz va biz shartli buyruqlardan foydalanishimiz mumkin. Yuqoridagi kodni refaktor qilamiz:

<?php
    
    function division($numerator, $denominator) {
        // 0 ni tekshirish uchun if buyruqini ishlating
        if($denominator != 0) {
            echo $numerator / $denominator;
        }
        else {
            echo "0 bo'lish bajarilmaydi!";
        }
    }

    // funksiyani chaqirish
    division(7, 0);
    
?>

Natija:

0 bo'lish bajarilmaydi!

Yuqorida ko'rganingizdek, birinchi namunamizdagidan ko'ra o'zimiz tomonidan qilingan tushunarli xatoni chiqarish ancha afzalroq.


Custom Error Handler dan foydalanish

Custom metodlarni PHP'da biron-bir xabarni ekranga chiqarish yoki bir xil vaqtda bajarilayotgan skriptdan chiqib ketish uchun ishlatiladi. Biz qiladigan ish set_error_handler() funksiyasiga o'zimizni default error handler metodimizni o'rnatishimizdan iborat holos. Namunaga qarang:

<?php
    
    // xatoni chiqarish uchun o'zimizni funksiya
    function tutorials_error_handler($error_no, $error_msg) {
        echo "Afsus, nimadir xato ketti...";
        echo "Taxminiy sabab: " . $error_msg;
        echo "Biz bu ustida ish olib boryapmiz.";
    }
    
    // yuqoridagi funksiyani default error handler sifatida o'rnatish
    set_error_handler("tutorials_error_handler");
    
    $result = 7 / 0;
    
?>

Natija:

Afsus, nimadir xato ketti...
Taxminiy sabab: Nolga bo'lish
Biz bu ustida ish olib boryapmiz.

Biz o'zimizni $error_no va $error_msg kabi funksiyamizni yaratishimiz va ularni xohlaganimizdek qayta ishlashimiz mumkin. Shuningdek, o'zimizni custom xabarimizni ko'rsatishimiz, xatolikni bazaga joylashtirishimiz va uni dasturchiga email orqali jo'natishimiz ham mumkin.


Error Reporting

PHP 'da xatolik sodir bo'lganda uni ekranda ko'rsatish uchun foydalanish mumkin bo'lgan default error reporting mexanizmi mavjud.

Xatolarni qayta ishlash koddagi xatolarni oqilona hal qilish va foydalanuvchiga yaxshiroq UX yetkazib berish uchun amalga oshiriladi.

Biz error_reporting() funksiyasidan foydalanib, qaysi xatoliklarni ko'rsatsin-u qaysilarini yashirishigacha belgilashimiz mumkin.

Funksiya sintaksisi:

<?php
    // error reporting funksiyasi
    error_reporting($reporting_level);
    
?>

$reporting_level o'zgaruvchisi uchun qiymat, qaysi xatolarni yashirish va qaysilarini ko'rsatish uchun belgilanadi. Agar hech qanday qiymat kiritmasak, unda default qiymatlar o'rnatiladi.

Quyidagi qiymatlar belgilashimiz mumkin bo'lgan har xil darajadagi xatoliklar:

Reporting Level Ta'rifi
E_WARNING Faqat ogohlantirish xabarlarni ko'rsatib, skript bajarilishini to'xtatmaydi.
E_NOTICE Odatiy kod bajarilishidagi sodir bo'ladigan ogohlantirishni ko'rsatadi.
E_USER_ERROR Foydalanuvchi tomonidan yaratilgan xatoliklarni ko'rsatadi, masalan: custom error handlers
E_USER_WARNING Foydalanuvchi tomonidan yaratilgan ogohlantirish xabarlarini ko'rsatadi.
E_USER_NOTICE Foydalanuvchi tomonidan yaratilgan ogohlantirishlarni ko'rsatadi.
E_RECOVERABLE_ERROR non-fatal xatoliklarni ko'rsatadi.
E_ALL Barcha xatoliklar va xabarlarni ko'rsatadi.