3-1: If, Else, Elseif
Objectives
- Memahami struktur if-else
- Menggunakan elseif untuk multiple conditions
- Memahami nested if dan common mistakes
- Mengenal operator perbandingan dan logika
- Mengetahui konsep truthy dan falsy di PHP
Kenapa Butuh Struktur Kontrol?
Program yang baik tidak hanya menjalankan baris demi baris dari atas ke bawah. Kadang kita butuh program untuk mengambil keputusan: "kalau ini benar, lakukan A; kalau tidak, lakukan B". Di sinilah struktur kontrol berperan.
Bayangkan seperti gerbang masuk sebuah gedung:
Dengan if, kita memberi "kartu akses" ke program kita: sebuah kondisi yang menentukan jalur mana yang dieksekusi.
Syntax Dasar If
<?php
$umur = 18;
// If basic
if ($umur >= 18) {
echo "Anda dewasa";
}
// If dengan block
if ($umur >= 18) {
echo "Anda dewasa";
echo "Boleh membuat KTP";
}
?>
Struktur if paling sederhana terdiri dari tiga bagian:
| Bagian | Contoh | Fungsi |
|---|---|---|
Keyword if | if | Menandai awal keputusan |
| Kondisi dalam kurung | ($umur >= 18) | Ekspresi yang dievaluasi |
Block { } | { ... } | Kode yang dijalankan jika kondisi true |
Jika kondisi bernilai true, block di dalam kurung kurawal dieksekusi. Jika false, block tersebut dilewati begitu saja dan program melanjutkan ke baris berikutnya.
If-Else
Terkadang kita ingin melakukan sesuatu juga saat kondisi bernilai false. Di sinilah else digunakan:
<?php
$nilai = 70;
if ($nilai >= 75) {
echo "Lulus";
} else {
echo "Tidak Lulus";
}
// Output: Lulus
?>
Jika $nilai diganti menjadi 60:
<?php
$nilai = 60;
if ($nilai >= 75) {
echo "Lulus";
} else {
echo "Tidak Lulus";
}
// Output: Tidak Lulus
?>
if-else menjamin salah satu dari dua jalur pasti dieksekusi — tidak mungkin keduanya, dan tidak mungkin keduanya dilewati.
If-Elseif-Else
Bagaimana kalau keputusannya lebih dari dua jalur? Gunakan elseif:
<?php
$score = 85;
if ($score >= 90) {
echo "Grade A";
} elseif ($score >= 80) {
echo "Grade B";
} elseif ($score >= 70) {
echo "Grade C";
} elseif ($score >= 60) {
echo "Grade D";
} else {
echo "Grade E";
}
// Output: Grade B
?>
Urutan kondisi itu penting! PHP mengevaluasi elseif dari atas ke bawah dan berhenti pada kondisi pertama yang true. Jika urutan dibalik (>= 60 dulu baru >= 90), semua nilai akan jatuh ke grade D.
Ilustrasi alur evaluasinya:
Operator Perbandingan
Kondisi dalam if dibangun dari operator perbandingan. Ini yang paling sering dipakai:
| Operator | Arti | Contoh | Hasil |
|---|---|---|---|
== | Sama dengan (loose) | 5 == "5" | true |
=== | Identik (strict) | 5 === "5" | false |
!= | Tidak sama (loose) | 5 != "5" | false |
!== | Tidak identik (strict) | 5 !== "5" | true |
> | Lebih besar | 10 > 5 | true |
< | Lebih kecil | 10 < 5 | false |
>= | Lebih besar atau sama | 5 >= 5 | true |
<= | Lebih kecil atau sama | 3 <= 2 | false |
<?php
$umur = "25"; // string!
// Loose comparison: PHP konversi otomatis
if ($umur == 25) {
echo "Loose: sama"; // Output: Loose: sama
}
// Strict comparison: tipe data harus sama juga
if ($umur === 25) {
echo "Strict: sama";
} else {
echo "Strict: beda"; // Output: Strict: beda (string vs int)
}
?>
Best practice: selalu gunakan === dan !== kecuali kamu punya alasan kuat memakai yang loose. Strict comparison menghindari bug tersembunyi akibat konversi tipe otomatis.
Operator Logika
Untuk menggabungkan beberapa kondisi, gunakan operator logika:
| Operator | Nama | Hasil true ketika |
|---|---|---|
&& | AND | Kedua kondisi true |
|| | OR | Salah satu kondisi true |
! | NOT | Kondisi bernilai false |
<?php
$umur = 22;
$punya_ktp = true;
$blacklist = false;
// AND: kedua kondisi harus benar
if ($umur >= 17 && $punya_ktp) {
echo "Boleh memilih"; // Output: Boleh memilih
}
// OR: cukup salah satu benar
if ($umur >= 17 || $blacklist) {
echo "Lolos filter"; // Output: Lolos filter
}
// NOT: membalik nilai boolean
if (!$blacklist) {
echo "Tidak masuk blacklist"; // Output: Tidak masuk blacklist
}
?>
&& dan || menggunakan short-circuit evaluation. Artinya, jika hasil sudah bisa ditentukan dari kondisi pertama, kondisi kedua TIDAK dievaluasi. Contoh: false && expensiveFunction() tidak akan pernah memanggil function tersebut.
Truthy dan Falsy
PHP tidak hanya menerima true/false di dalam kondisi — nilai apa pun bisa dipakai. Nilai yang dianggap false dalam konteks boolean disebut falsy:
| Nilai | Boolean |
|---|---|
0 | false |
"" (string kosong) | false |
"0" (string nol) | false |
null | false |
[] (array kosong) | false |
"hello" | true |
42 | true |
"0.0" | true (string bukan "0") |
<?php
$jumlah_item = 0;
if ($jumlah_item) {
echo "Keranjang terisi";
} else {
echo "Keranjang kosong"; // Output: Keranjang kosong (0 = falsy)
}
$nama = "Budi";
if ($nama) {
echo "Halo, $nama"; // Output: Halo, Budi (string non-kosong = truthy)
}
?>
Mengecek if ($jumlah_item) lebih ringkas daripada if ($jumlah_item != 0). Tapi hati-hati dengan string "0" — ia juga falsy dan sering mengecoh pemula!
Alternative Syntax
PHP menyediakan alternative syntax untuk if statements (berguna di HTML templates):
<?php
$active = true;
if ($active):
echo "User active";
else:
echo "User inactive";
endif;
?>
Dalam HTML:
<?php if ($is_logged_in): ?>
<a href="/logout">Logout</a>
<?php else: ?>
<a href="/login">Login</a>
<?php endif; ?>
Perhatikan: : menggantikan {, dan endif; menggantikan }. Bentuk ini sangat populer di template karena lebih mudah dibaca saat bercampur dengan tag HTML.
Nested If
Kadang keputusan bertingkat: harus memenuhi syarat pertama dulu sebelum memeriksa syarat kedua.
<?php
$age = 25;
$has_license = true;
$has_car = true;
if ($age >= 18) {
if ($has_license) {
if ($has_car) {
echo "Boleh driving";
} else {
echo "Butuh punya mobil dulu";
}
} else {
echo "Butuh SIM dulu";
}
} else {
echo "Belum cukup umur";
}
?>
Avoid deep nesting! Lebih dari 2-3 level nesting membuat code sulit dibaca. Gunakan early returns atau restructure logic.
Cara memperbaiki nested if yang dalam adalah dengan early return — periksa kondisi negatif duluan dan keluar secepat mungkin:
<?php
function boleh_driving(int $age, bool $has_license, bool $has_car): string
{
if ($age < 18) {
return "Belum cukup umur";
}
if (!$has_license) {
return "Butuh SIM dulu";
}
if (!$has_car) {
return "Butuh punya mobil dulu";
}
return "Boleh driving";
}
echo boleh_driving(25, true, true); // Output: Boleh driving
echo boleh_driving(16, true, true); // Output: Belum cukup umur
echo boleh_driving(25, false, true); // Output: Butuh SIM dulu
?>
Common Mistakes
Mistake 1: Assignment (=) vs Comparison (==)
<?php
// ❌ ERROR: Assignment, bukan comparison!
if ($status = "active") {
echo "Active"; // Selalu executed karena assignment returns value
}
// ✅ BENAR: Comparison
if ($status == "active") {
echo "Active";
}
// ✅ TERBAIK: Identical comparison
if ($status === "active") {
echo "Active";
}
?>
Mistake 2: Forgetting Braces for Single Line
<?php
$active = true;
$logged_in = false;
// ⚠️ Works tapi BAD practice
if ($active)
echo "Active";
// ❌ CONFUSING - hanya baris pertama inside if!
if ($logged_in)
echo "Logged in";
echo "Show content"; // Ini SELALU executed karena bukan bagian if!
// ✅ ALWAYS use braces
if ($logged_in) {
echo "Logged in";
echo "Show content";
}
?>
Mistake 3: Checking Boolean
<?php
$is_valid = true;
// ❌ REDUNDANT
if ($is_valid === true) {
echo "Valid";
}
// ✅ SIMPLER
if ($is_valid) {
echo "Valid";
}
// ❌ WRONG
if ($is_valid === false) {
echo "Invalid";
}
// ✅ CORRECT
if (!$is_valid) {
echo "Invalid";
}
?>
Mistake 4: Elseif vs Else If
<?php
$nilai = 80;
// Keduanya valid, tapi penulisannya beda:
// 1. elseif (satu kata) - gaya paling umum
if ($nilai >= 90) {
echo "A";
} elseif ($nilai >= 75) {
echo "B"; // Output: B
}
// 2. else if (dua kata, dengan spasi)
if ($nilai >= 90) {
echo "A";
} else if ($nilai >= 75) {
echo "B"; // Output: B
}
// ⚠️ Perbedaan teknis: "else if" sebenarnya adalah
// "else" yang berisi "if" baru. Hasilnya sama untuk
// kasus sederhana, tapi "elseif" lebih disukai.
?>
Mistake 5: Membandingkan String dengan Angka
<?php
// PHP 8 mengubah perilaku perbandingan string vs angka
$hasil = "10" < 9;
// Di PHP 7: false ("10" diubah jadi 10)
// Di PHP 8: false (string numerik dibandingkan sebagai angka)
var_dump($hasil); // Output: bool(false)
// String non-numerik dibandingkan secara string
var_dump("abc" == 0); // Output: bool(false) — di PHP 8!
// (Di PHP 7 hasilnya true — ini alasan kenapa strict comparison penting)
?>
Pro Tips
- Selalu pakai braces
{ }meskipun body-nya satu baris — mencegah bug saat kode ditambah nanti. - Hindari kondisi negatif ganda seperti
if (!($a > $b))— tulisif ($a <= $b). - Pisahkan kondisi kompleks ke dalam variable bernama:
$bisa_beli = $saldo >= $harga && !$diblokir;laluif ($bisa_beli). - Gunakan
elseif, bukanelse if, untuk konsistensi gaya. - Untuk logika yang hanya memilih satu dari dua nilai, pertimbangkan ternary (lihat materi 3-3).
Exercise
- Buat grade calculator: A (90+), B (80+), C (70+), D (60+), E (<60)
- Validasi login: check username exists AND password correct
- Apa output dari:
<?php
$x = 5;
if ($x = 10) { // typo: = instead of ==
echo "x is 10";
} else {
echo "x is not 10";
}
?>
- Buat program yang menerima variabel
$hari(string nama hari bahasa Inggris). Tampilkan "Weekend" jika Sabtu/Minggu, "Weekday" jika Senin-Jumat, dan "Invalid day" jika lainnya. - Refactor nested if berikut menjadi early return style: cek
$umur >= 17(boleh KTP),$punya_akta(butuh akta),$domisili(butuh domisili).
Summary
| Konsep | Poin Kunci |
|---|---|
if | Menjalankan block jika kondisi true |
else | Jalur alternatif saat kondisi false |
elseif | Kondisi tambahan, dievaluasi berurutan dari atas |
| Operator | == loose, === strict, && AND, || OR, ! NOT |
| Truthy/Falsy | 0, "", "0", null, [] dianggap false |
| Nested if | Hindari > 2-3 level, pakai early return |
| Best practice | Selalu braces, selalu ===, hindari assignment di kondisi |
Klik tombol ini setelah menyelesaikan materi
Quiz Bab 3
Uji pemahamanmu tentang Struktur Kontrol