Shartlar — if, elseif, else, ternary operator
Muammodan boshlaylik
Hozirgacha yozgan dasturlarimiz har doim bir xil ishlaydi — yuqoridan pastga, har bir qator bajariladi. Lekin haqiqiy sayt qaror qabul qiladi:
- Foydalanuvchi kirganmi? — "Profil" tugmasini ko'rsat, aks holda "Kirish"
- Savatda 500 000 so'mdan ko'p mahsulot bormi? — yetkazib berish bepul
- Parol to'g'rimi? — kirgiz, aks holda xato chiqar
Bunday "agar ... bo'lsa" mantiqi — shartlar orqali yoziladi.
if — agar
<?php
$yosh = 20;
if ($yosh >= 18) {
echo "Saytga kirishingiz mumkin";
}
Tuzilishi:
if— kalit so'z( ... )— shart; natijasitrueyokifalsebo'ladi{ ... }— sharttruebo'lsa bajariladigan kod
Shart false bo'lsa — {} ichidagi kod butunlay o'tkazib yuboriladi.
else — aks holda
<?php
$parol = "12345";
if ($parol === "maxfiy2024") {
echo "Xush kelibsiz!";
} else {
echo "Parol noto'g'ri";
}
Ikki yo'ldan faqat bittasi bajariladi. Hech qachon ikkalasi ham, hech qachon birortasi ham emas.
elseif — yoki agar
Ikkitadan ko'p variant bo'lsa:
<?php
$ball = 78;
if ($ball >= 90) {
echo "A'lo";
} elseif ($ball >= 70) {
echo "Yaxshi";
} elseif ($ball >= 50) {
echo "Qoniqarli";
} else {
echo "Qoniqarsiz";
}
// Yaxshi
PHP shartlarni yuqoridan pastga tekshiradi va birinchi to'g'ri kelganini bajaradi. Qolganlari tekshirilmaydi ham.
Shuning uchun tartib muhim:
<?php
$ball = 95;
// ❌ Xato tartib
if ($ball >= 50) {
echo "Qoniqarli"; // 95 uchun ham shu chiqadi!
} elseif ($ball >= 90) {
echo "A'lo"; // bu yerga hech qachon yetib kelmaydi
}
Qoida: eng tor shartni birinchi yozing.
Murakkab shartlar
&& (va), || (yoki), ! (emas) bilan shartlarni birlashtirish:
<?php
$summa = 650000;
$shahar = "Toshkent";
if ($summa >= 500000 && $shahar === "Toshkent") {
echo "Yetkazib berish bepul";
}
$rol = "moderator";
if ($rol === "admin" || $rol === "moderator") {
echo "Boshqaruv paneliga kirish mumkin";
}
$bloklangan = false;
if (!$bloklangan) {
echo "Akkaunt faol";
}
Ichma-ich shartlar
<?php
$kirgan = true;
$admin = false;
if ($kirgan) {
if ($admin) {
echo "Admin panel";
} else {
echo "Shaxsiy kabinet";
}
} else {
echo "Iltimos, tizimga kiring";
}
Ishlaydi, lekin 3-4 qavat ichma-ich bo'lsa — o'qish qiyinlashadi. Ko'pincha "erta chiqish" (early return) usuli yaxshiroq — buni funksiyalar darsida ko'ramiz.
Ternary operator — qisqa if/else
Oddiy "agar — u, aks holda — bu" uchun bir qatorli yozuv:
<?php
$yosh = 16;
$holat = $yosh >= 18 ? "Katta" : "Voyaga yetmagan";
echo $holat; // Voyaga yetmagan
Tuzilishi: shart ? true_bo'lsa : false_bo'lsa
HTML ichida juda qulay:
<p class="<?= $faol ? 'yashil' : 'kulrang' ?>">Holat</p>
Qisqa ternary ?: — chapdagi qiymat "true" bo'lsa o'zini, aks holda o'ngdagini oladi:
<?php
$ism = "";
echo $ism ?: "Mehmon"; // Mehmon
[!WARNING] Ternary ichida ternary yozmang.
$a ? $b : ($c ? $d : $e)— o'qib bo'lmaydi. PHP 8 da qavssiz ichma-ich ternary umuman xato beradi. Bunday holatdaif/elseifyokimatchishlating.
HTML ichida if — alternativ sintaksis
HTML shablonlarda { va } ni kuzatish qiyin. Buning uchun maxsus yozuv bor:
<?php $kirgan = true; $ism = "Dilshod"; ?>
<?php if ($kirgan): ?>
<p>Salom, <?= $ism ?>!</p>
<a href="/chiqish">Chiqish</a>
<?php else: ?>
<a href="/kirish">Kirish</a>
<?php endif; ?>
{ o'rniga :, } o'rniga endif;. Natija bir xil, lekin HTML bilan aralashganda ancha o'qishli. Bu yozuvni WordPress va Laravel ning eski shablonlarida ko'p ko'rasiz.
Nima uchun shunday?
Nima uchun {} qavslar har doim kerak — bitta qator bo'lsa ham?
Texnik jihatdan bitta buyruq bo'lsa qavssiz ham ishlaydi:
<?php
if ($admin) echo "Salom, admin";
Lekin keyin kimdir ikkinchi qatorni qo'shadi:
<?php
if ($admin)
echo "Salom, admin";
o_chirish_huquqini_ber(); // ❌ bu if ga tegishli EMAS — har doim bajariladi!
Chekinish (indent) ko'zni aldaydi. PHP chekinishga qaramaydi. Shuning uchun PSR-12 standarti {} ni har doim talab qiladi.
Tez-tez uchraydigan xatolar
= ni === o'rniga yozish:
<?php
if ($rol = "admin") { ... } // ❌ har doim true
if ($rol === "admin") { ... } // ✅
else if va elseif: ikkalasi ham ishlaydi, lekin alternativ sintaksisda (: bilan) faqat elseif ishlaydi. Doim elseif yozing.
Satrni songa noto'g'ri solishtirish:
<?php
$miqdor = $_GET['miqdor'] ?? '0'; // "0" — string
if ($miqdor === 0) { // ❌ hech qachon true bo'lmaydi — "0" string
echo "Bo'sh";
}
if ((int) $miqdor === 0) { // ✅
echo "Bo'sh";
}
Xulosa
Eslab qoling:
if→elseif→else— yuqoridan pastga, birinchi to'g'ri kelgani bajariladi- Eng tor shartni birinchi yozing
&&,||,!— shartlarni birlashtirishshart ? a : b— oddiy holatlar uchun qisqa yozuv- HTML ichida:
if (...):...endif; {}ni har doim yozing
Keyingi dars
9-dars: switch va match — qachon qaysi biri