PHP xatolar bilan ishlash (try, catch)

Fayl yo’q, baza javob bermayapti, foydalanuvchi noto’g’ri ma’lumot kiritdi — bularni oldindan aytib bo’lmaydi. Yaxshi dastur xatoni kutadi va uni to’g’ri boshqaradi.

Ikki xil muammo

Xato dasturni to’xtatadi

PHP

try/catch bo’lmaganida butun sahifa oq ekran bilan tugardi.

try, catch, finally

PHP

finally har doim bajariladi — xato bo’lsa ham, return bo’lsa ham. Resurslarni tozalash uchun ishlatiladi.

throw — o’z xatongni yaratish

PHP

catch (A | B $e) — bir necha turni birdan ushlaydi.

Asosiy istisno turlari

Sinf Qachon
InvalidArgumentException Argument noto’g’ri
RuntimeException Ish paytida yuzaga keldi
RangeException Qiymat ruxsat etilgan oraliqdan tashqarida
JsonException JSON o’qish/yozishda
TypeError Tur mos kelmadi
DivisionByZeroError Nolga bo’lish

Turini aniq tanlash muhim — catch da qaysi muammo ekanini ajratishga imkon beradi.

Bir necha catch

PHP

Tartib muhim: aniqroq turlar yuqorida, umumiy Throwable — oxirida. PHP birinchi mos kelganini tanlaydi.

Xato haqidagi ma’lumot

PHP

getFile() va getTraceAsString() ham bor — ular jurnalga yozishda foydali.

Sabab zanjiri

PHP

Uchinchi argument — asl sabab. Bu qatlamlar orasida kontekstni yo’qotmasdan xato uzatish usuli.

O’z istisno sinfingiz

PHP

O’z sinfingiz qo’shimcha ma’lumot (bu yerda — maydonlar bo’yicha xatolar) tashishi mumkin.

Xatoni yutib yubormang

PHP

Ishlab chiqarishda ko’rsatish

PHP

Global ushlagich

Ushlanmagan har qanday xato uchun oxirgi himoya:

set_exception_handler(function (Throwable $e) {
    error_log($e->getMessage());
    http_response_code(500);
    echo "Kutilmagan xatolik yuz berdi.";
});

Bu foydalanuvchi hech qachon PHP xato matnini ko’rmasligini kafolatlaydi.

Qachon istisno, qachon qaytarish

PHP

Qoida: odatiy natija (topilmadi) uchun null qaytaring; bo’lmasligi kerak bo’lgan holat uchun istisno tashlang.

Amaliy mashq

  1. Nolga bo’lishni try/catch bilan ushlang;
  2. throw bilan o’z xatongizni tashlang;
  3. finally blokini qo’shib, qachon ishlashini kuzating;
  4. bir necha catch yozib, tartibini sinang;
  5. getPrevious() bilan sabab zanjirini yasang;
  6. Exception dan meros olib, o’z sinfingizni yozing.

Qisqacha xulosa

  • try/catch xatoni ushlaydi va dasturni to’xtashdan saqlaydi.
  • finally har doim bajariladi — tozalash uchun.
  • throw bilan o’z istisnongizni tashlaysiz; turini aniq tanlang.
  • catch (A | B $e) bir necha turni ushlaydi; aniqroq turlar yuqorida.
  • Uchinchi argument — asl sabab (getPrevious).
  • Bo’sh catch yozmang — kamida jurnalga yozing.
  • Ishlab chiqarishda xato matnini foydalanuvchiga ko’rsatmang.

Keyingi darsda yakuniy loyiha — o’rganilganlarni birga qo’llaymiz.

Bu dars foydali bo'ldimi?

marta ko'rildi