Kontrol Alur — PHP

PHP memiliki beberapa cara untuk mengontrol alur program. if / elseif / else: $nilai = 85; if ($nilai >= 90) { echo "A"; } elseif ($nilai >= 80) { echo "B"; }…

Kontrol alur adalah cara kode memilih jalan: baris mana yang dijalankan tergantung keadaannya. Bayangin Bu Tini di kasir Warung Bu Tini. Dia melihat total belanja pembeli lalu memutuskan: kalau Rp100.000 ke atas, gratis ongkir; kalau gak, kalau Rp50.000 ke atas, diskon 10%; kalau gak juga, harga normal. Dia mengecek dari atas, dan berhenti di aturan pertama yang cocok. Itu persis cara kerja if.

🧪 Tebakan cepat: Total belanjanya Rp120.000. Kodenya mengecek $total >= 25000 lebih dulu, baru $total >= 50000, lalu $total >= 100000. Label mana yang tercetak? Tebak dulu, jawabannya ada di bagian "Urutan kondisi menentukan hasil".

if, elseif, else: dicek dari atas

<?php
$total = 60000;

if ($total >= 100000) {
    echo "Gratis ongkir";
} elseif ($total >= 50000) {
    echo "Diskon 10%";
} elseif ($total >= 25000) {
    echo "Bonus kerupuk";
} else {
    echo "Harga normal";
}

Ini yang dikerjakan PHP untuk $total = 60000:

Kondisi Hasil Yang terjadi
$total >= 100000 false lewat, cek berikutnya
$total >= 50000 true cetak Diskon 10%, selesai
$total >= 25000 gak dicek dilewati
else gak dicek dilewati

Operator perbandingan yang sering dipakai: >= (lebih besar atau sama dengan), >, <=, <, === (sama persis: nilai dan tipenya) dan !== (gak sama persis). Dua syarat bisa digabung dengan && (dan) atau || (atau), dan ! membalik true jadi false.

Total tepat Rp50.000 dapat Diskon 10%, karena 50000 >= 50000 bernilai true. Nilai yang pas di batas ikut tingkat itu.

Urutan kondisi menentukan hasil

<?php
$total = 120000;

if ($total >= 25000) {
    echo "Bonus kerupuk";
} elseif ($total >= 50000) {
    echo "Diskon 10%";
} elseif ($total >= 100000) {
    echo "Gratis ongkir";
}
// Output: Bonus kerupuk

120000 >= 25000 sudah true di cek pertama, jadi yang tercetak Bonus kerupuk, dan dua kondisi di bawahnya gak pernah dicek. Itu jawaban tebakannya. Aturannya: kalau pakai >=, mulai dari batas paling tinggi lalu turun.

Batasnya juga harus pas. Kalau >= 50000 ditulis > 50000, total tepat Rp50.000 gak lolos dan turun ke Bonus kerupuk.

Nilai yang dianggap false

Kondisi gak harus perbandingan. if ($jumlah) juga boleh: PHP mengubah nilainya jadi true atau false dulu. Yang dianggap false (falsy) cuma ini: false, 0, 0.0, "" (string kosong), "0", null, dan [] (array kosong). Semua yang lain true (truthy), termasuk "0.0", " ", "false" dan -1.

<?php
$jumlah = 0;
echo $jumlah ? "Ada pesanan" : "Belum ada pesanan"; // Belum ada pesanan

$kode = "0";
if ($kode) {
    echo "true";
} else {
    echo "false"; // ini yang jalan: "0" dianggap false
}

kondisi ? A : B disebut ternary: if-else pendek yang menghasilkan nilai. Kalau kondisinya true hasilnya A, kalau false hasilnya B.

match: satu nilai, banyak pilihan

<?php
$status = "dimasak";

echo match ($status) {
    "baru" => "Pesanan diterima",
    "dimasak" => "Sedang dimasak",
    "siap" => "Siap diantar",
    default => "Status tidak dikenal",
};
// Output: Sedang dimasak
Fatal error: Uncaught UnhandledMatchError: Unhandled match case 'diantar' in /app/warung.php:4

Untuk rentang nilai, tulis match (true): tiap kondisi di kiri dihitung, dan yang pertama bernilai true menang.

$label = match (true) {
    $total >= 100000 => "Gratis ongkir",
    $total >= 50000 => "Diskon 10%",
    default => "Harga normal",
};

switch: versi lama dengan break

<?php
$hari = "Jumat";

switch ($hari) {
    case "Senin":
        echo "Belanja ke pasar";
        break;
    case "Jumat":
        echo "Menu spesial: Nasi Kebuli";
        break;
    default:
        echo "Menu biasa";
}

Kalau nilainya null: ??

<?php
$pesanan = ["menu" => "Es Teh"];

echo $pesanan["catatan"] ?? "tanpa catatan"; // tanpa catatan

a ?? b artinya: pakai a kalau ada dan bukan null, kalau gak, pakai b. Tanpa ??, membaca key yang gak ada memunculkan Warning: Undefined array key "catatan". Ingat, ?? cuma mengganti yang null atau gak ada: catatan berisi "" tetap dicetak kosong.

Nanti di pelajaran OOP kamu ketemu object. Saudaranya, ?->, membaca isi object yang mungkin null: $pelanggan?->nama ?? "Tamu" menghasilkan "Tamu" kalau $pelanggan null, bukan Warning: Attempt to read property "nama" on null.

⚠️ Jebakan yang sering ketemu

TL;DR: if/elseif/else dicek dari atas dan cuma cabang pertama yang true yang jalan, jadi urutkan batas >= dari yang tertinggi dan pakai >= supaya nilai di batas ikut. Yang dianggap false: false, 0, 0.0, "", "0", null, []. kondisi ? A : B adalah if-else pendek. match membandingkan dengan === dan menghasilkan nilai; tanpa default, nilai yang gak cocok bikin UnhandledMatchError. switch membandingkan dengan ==, tiap case butuh break. a ?? b memakai b kalau a null atau gak ada.

Yang akan kamu pelajari