Struktur if-else pada Chapter sebelumnya menyediakan dua cabang: kondisi terpenuhi atau tidak. Keputusan nyata sering berjenjang — nilai uji diterjemahkan menjadi grade A sampai D, total belanja menentukan persentase diskon, berat paket menentukan tarif ongkir. Menumpuk banyak blok if-else terpisah untuk tiap jenjang membuat kode berulang dan rawan salah, karena kondisi yang sudah terjawab tetap diperiksa ulang. PHP menyediakan elseif untuk merangkai banyak kondisi menjadi satu kesatuan keputusan. Pada Chapter ini kita akan membangun rantai elseif, memahami mengapa urutan kondisi menentukan hasil, membandingkan elseif dengan else if, lalu menjaga keterbacaan rantai yang panjang.

Rantai elseif #

Keyword elseif menyambung cabang tambahan setelah if, dan hanya satu cabang dari seluruh rantai yang dieksekusi:

php
<?php
$nilai = 87;

if ($nilai >= 90) {
    echo "Grade A\n";
} elseif ($nilai >= 80) {
    echo "Grade B\n";
} elseif ($nilai >= 70) {
    echo "Grade C\n";
} else {
    echo "Grade D\n";
}

Output yang Dihasilkan:

text
Grade B

Mari kita telusuri jalur interpreter pada rantai di atas. Kondisi pertama 87 >= 90 bernilai false, sehingga cabang Grade A dilewati. Kondisi kedua 87 >= 80 bernilai true, blok Grade B dieksekusi, lalu interpreter melompat ke akhir rantai — kondisi 87 >= 70 tidak pernah diperiksa meski sebenarnya juga bernilai true. Perilaku “pemenang pertama” (first match wins) inilah inti elseif. Cabang else di ujung menampung semua nilai yang gagal di setiap kondisi; cabang tersebut boleh dihilangkan, tetapi tanpa else sebuah rantai dapat berakhir tanpa mengeksekusi apa pun ketika tidak ada kondisi yang cocok.

Urutan Kondisi Menentukan Hasil #

Karena pemenang ditentukan sekali jalan dari atas, urutan kondisi adalah bagian dari logika — bukan sekadar tata letak. Perhatikan rantai yang susunannya terbalik:

php
<?php
$nilai = 95;

if ($nilai >= 70) {
    echo "Grade C\n";
} elseif ($nilai >= 90) {
    echo "Grade A\n";
} else {
    echo "Grade D\n";
}

Output yang Dihasilkan:

text
Grade C

Nilai 95 jelas layak mendapat grade A, tetapi kondisi pertama 95 >= 70 sudah terpenuhi lebih dulu sehingga Grade C yang tercetak. PHP tidak mengeluarkan error maupun peringatan; hasil yang salah berjalan diam-diam — jenis bug paling mahal untuk dicari. Kedua kondisi tumpang tindih, dan tumpang tindih itulah sumber masalahnya.

Memeriksa Rentang Nilai #

Ada dua gaya penulisan untuk keputusan berjenjang. Gaya pertama memakai ambang menurun dan membiarkan rentang tersirat dari posisi cabang:

php
<?php
$totalBelanja = 750000;

if ($totalBelanja >= 1000000) {
    echo "Diskon 20%\n";
} elseif ($totalBelanja >= 500000) {
    echo "Diskon 10%\n";
} elseif ($totalBelanja >= 250000) {
    echo "Diskon 5%\n";
} else {
    echo "Tanpa diskon\n";
}

Output yang Dihasilkan:

text
Diskon 10%

Cabang kedua sebenarnya berarti “Rp500.000 sampai di bawah Rp1.000.000” — batas atasnya tidak ditulis, tetapi tersaring oleh cabang pertama yang berdiri di atasnya. Gaya ini ringkas dan mudah dipindai untuk rantai pendek. Gaya kedua menuliskan rentang secara eksplisit dengan operator logika:

php
<?php
$totalBelanja = 750000;

if ($totalBelanja >= 250000 && $totalBelanja < 500000) {
    echo "Diskon 5%\n";
} elseif ($totalBelanja >= 500000 && $totalBelanja < 1000000) {
    echo "Diskon 10%\n";
} elseif ($totalBelanja >= 1000000) {
    echo "Diskon 20%\n";
} else {
    echo "Tanpa diskon\n";
}

Output yang Dihasilkan:

text
Diskon 10%

Kali ini tiap kondisi menyatakan rentang penuh dengan batas bawah dan batas atas, sehingga urutan cabang boleh diacak tanpa mengubah makna. Kode menjadi lebih verbal, namun tahan terhadap salah urutan dan memaksa penulis menyadari persis di mana setiap rentang dimulai serta berakhir. Gunakan ambang menurun untuk rantai pendek yang berurutan rapi, dan rentang eksplisit ketika jenjangnya tidak berpola atau saat kejelasan lebih diutamakan daripada keringkasan.

elseif versus else if #

PHP menerima dua ejaan untuk cabang tengah, dan keduanya setara selama blok memakai kurung kurawal:

php
<?php
$poin = 87;

if ($poin >= 90) {
    echo "Puas\n";
} else if ($poin >= 80) {
    echo "Baik\n";
} else {
    echo "Perlu latihan\n";
}

Output yang Dihasilkan:

text
Baik

Perhatikan ejaan else if — dua kata terpisah — pada cabang kedua. Dengan kurung kurawal, PHP membaca bentuk tersebut sebagai else yang badannya berisi satu pernyataan if lengkap, sehingga hasilnya identik dengan elseif. Perbedaan yang sesungguhnya baru muncul pada sintaks alternatif yang memakai titik dua — sintaks yang umum dijumpai pada template dan dibahas tuntas di Chapter Alternative Control Structure Syntax :

php
<?php
$nilai = 87;

if ($nilai >= 60):
    echo "Lulus\n";
else if ($nilai < 60):
    echo "Remedial\n";
endif;

Output yang Dihasilkan:

text

Parse error: syntax error, unexpected token "if", expecting ":" in /home/z/my-project/php-course/content/php/control-flow/elseif/.verify_tmp.php on line 6

Eksekusi berakhir dengan parse error. Pada sintaks titik dua, keyword else harus langsung diikuti tanda titik dua — pesan kesalahan unexpected token "if", expecting ":" menunjuk persis ke lokasi itu. Bentuk dua kata membuat parser mengira Anda memulai pernyataan baru setelah else, sesuatu yang tidak diizinkan dalam sintaks alternatif; ganti menjadi elseif ($nilai < 60): dan rantai tersebut berjalan normal.

Keterbacaan Rantai Panjang #

Rantai tiga sampai lima cabang masih sehat untuk dibaca. Saat daftar kondisi terus memanjang, beberapa pertimbangan membantu menjaga keterbacaan:

  • Pastikan setiap cabang benar-benar sejajar — membandingkan hal yang sama pada variabel yang sama. Rantai yang mencampur beberapa variabel biasanya adalah dua keputusan yang terjepit menjadi satu.
  • Saring kasus penolak lebih dulu memakai guard clause dan early return dari Chapter if-else , sehingga rantai utama hanya memuat kasus normal.
  • Untuk perbandingan kesetaraan murni — satu variabel dicek terhadap banyak nilai — struktur match lebih ringkas dan bebas jatuh ke cabang berikutnya; kita bahas pada Chapter Match Expression .
  • Saat nanti menguasai array, pemetaan nilai-ke-hasil sering kali cukup ditulis sebagai tabel pencarian satu baris, tanpa cabang sama sekali.
  • Jika keputusan memang bertingkat — syarat tambahan yang hanya relevan pada satu cabang tertentu — susun if di dalam if sebagaimana dibahas pada Chapter Nested Conditions .

Pilihan struktur mengikuti bentuk masalahnya: jenjang satu dimensi memakai elseif, keputusan kesetaraan memakai match, dan syarat berlapis memakai penyusunan bertingkat.

Ringkasan #

elseif merangkai kondisi berjenjang dalam satu kesatuan keputusan yang hanya mengeksekusi satu cabang: interpreter memeriksa kondisi dari atas ke bawah dan berhenti pada kecocokan pertama, sehingga urutan serta tumpang tindih kondisi menjadi bagian dari logika. Ambang menurun menjaga rantai tetap ringkas, rentang eksplisit menjadikannya tahan salah urutan, dan ejaan satu kata elseif bekerja pada kedua gaya sintaks. Kadang keputusan tidak sejajar melainkan bertingkat — syarat tambahan yang hanya relevan di dalam satu cabang tertentu. Chapter berikutnya menyusun kondisi di dalam kondisi pada Nested Conditions.

Referensi #