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
try/catch bo’lmaganida butun sahifa oq ekran bilan tugardi.
try, catch, finally
finally har doim bajariladi — xato bo’lsa ham, return bo’lsa ham.
Resurslarni tozalash uchun ishlatiladi.
throw — o’z xatongni yaratish
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
Tartib muhim: aniqroq turlar yuqorida, umumiy Throwable — oxirida.
PHP birinchi mos kelganini tanlaydi.
Xato haqidagi ma’lumot
getFile() va getTraceAsString() ham bor — ular jurnalga yozishda
foydali.
Sabab zanjiri
Uchinchi argument — asl sabab. Bu qatlamlar orasida kontekstni yo’qotmasdan xato uzatish usuli.
O’z istisno sinfingiz
O’z sinfingiz qo’shimcha ma’lumot (bu yerda — maydonlar bo’yicha xatolar) tashishi mumkin.
Xatoni yutib yubormang
Ishlab chiqarishda ko’rsatish
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
Qoida: odatiy natija (topilmadi) uchun null qaytaring; bo’lmasligi
kerak bo’lgan holat uchun istisno tashlang.
Amaliy mashq
- Nolga bo’lishni
try/catchbilan ushlang; throwbilan o’z xatongizni tashlang;finallyblokini qo’shib, qachon ishlashini kuzating;- bir necha
catchyozib, tartibini sinang; getPrevious()bilan sabab zanjirini yasang;Exceptiondan meros olib, o’z sinfingizni yozing.
Qisqacha xulosa
try/catchxatoni ushlaydi va dasturni to’xtashdan saqlaydi.finallyhar doim bajariladi — tozalash uchun.throwbilan 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
catchyozmang — kamida jurnalga yozing. - Ishlab chiqarishda xato matnini foydalanuvchiga ko’rsatmang.
Keyingi darsda yakuniy loyiha — o’rganilganlarni birga qo’llaymiz.