Shartlar — if, elseif, else, ternary operator

~12 daq · PHP · Boshqaruv tuzilmalari

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; natijasi true yoki false bo'ladi
  • { ... } — shart true bo'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 holatda if/elseif yoki match ishlating.


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 birlashtirish
  • shart ? 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