Seluruh contoh kita sejauh ini berjalan di berkas PHP murni. Pada aplikasi web nyata, PHP justru paling sering dicampur dengan HTML untuk mencetak halaman dinamis. Di titik itu muncul masalah keterbacaan: kurung kurawal penutup } dari if atau foreach tidak memberi petunjuk struktur apa yang sedang ditutup, dan mata kita harus bolak-balik memasangkan { dengan } yang terpisah jauh oleh baris-baris HTML. PHP menyediakan sintaks alternatif — endif, endforeach, endwhile — yang mengganti kurung kurawal dengan kata kunci penutup eksplisit. Chapter ini membahas bentuknya, daftar pasangan lengkapnya, serta alasan template besar seperti theme WordPress memakainya hingga hari ini.

Masalah dengan Kurung Kurawal di Template #

Mari kita lihat dulu masalahnya secara konkret. Contoh berikut mencampur PHP dan HTML menggunakan kurung kurawal biasa — dan tetap berjalan baik sebagai skrip CLI:

php
<?php $stok = 3 ?>
<p>Status stok:
<?php if ($stok > 0) { ?>
    Tersedia
<?php } else { ?>
    Habis
<?php } ?>
</p>

Output yang Dihasilkan:

text
<p>Status stok:
    Tersedia
</p>

Skrip di atas membuka blok PHP untuk menyiapkan $stok, menutupnya dengan ?>, lalu mencetak HTML apa adanya. Bagian if membuka kurung kurawal { di akhir satu blok PHP dan menutupnya dengan } di blok PHP yang lain — bahkan else harus ditulis di antara dua blok terpisah. Bayangkan struktur ini berlipat ganda pada template sungguhan yang memuat belasan kondisi: setiap } telanjang tidak memberi tahu apakah ia menutup if, foreach, atau while milik baris lima puluh baris di atasnya.

Daftar Pasangan Sintaks Alternatif #

Mekanismeninya sederhana: titik dua : menggantikan kurung buka, dan kata kunci end* menggantikan kurung tutup. Tabel berikut memuat pasangan lengkap yang didukung PHP:

StrukturPembukaPenutup
if / if-elseif (...):endif;
whilewhile (...):endwhile;
forfor (...; ...; ...):endfor;
foreachforeach (... as ...):endforeach;
switchswitch (...):endswitch;

Dua catatan penting menyertai tabel ini. Pertama, else dan elseif ditulis apa adanya di antara cabang-cabang — keduanya tidak punya bentuk penutup sendiri; hanya struktur terluar yang ditutup sekali. Kedua, do-while satu-satunya struktur kendali alur yang tidak memiliki bentuk alternatif, karena penutupnya justru kondisi while (...) yang sudah menempel di ujung blok.

if dengan endif #

Bentuk paling mendasar adalah mengubah if-elseif-else menjadi gaya titik dua. Setiap cabang ditulis seperti biasa; endif; menutup keseluruhan struktur:

php
<?php
$saldo = 75000;

if ($saldo >= 50000):
    echo "Saldo cukup.\n";
    echo "Saldo saat ini: Rp$saldo\n";
elseif ($saldo > 0):
    echo "Saldo kurang, transaksi ditolak.\n";
else:
    echo "Saldo nol.\n";
endif;

Output yang Dihasilkan:

text
Saldo cukup.
Saldo saat ini: Rp75000

Baris if ($saldo >= 50000): membuka struktur dengan titik dua sebagai pengganti {. Karena $saldo bernilai 75000, kedua echo pada cabang pertama dijalankan, lalu elseif dan else dilewati. Baris endif; menutup struktur dan sekaligus menyatakan secara eksplisit: “blok kondisi berakhir di sini”. Perhatikan bahwa endif diakhiri titik koma seperti pernyataan biasa — kelalaian menuliskannya adalah kesalahan paling umum saat pertama kali memakai sintaks ini.

while dengan endwhile #

Struktur perulangan mengikuti pola yang sama. Contoh berikut menghitung mundur dengan while ... endwhile:

php
<?php
$hitungan = 3;

while ($hitungan > 0):
    echo "Hitungan: $hitungan\n";
    $hitungan--;
endwhile;

echo "Mulai!\n";

Output yang Dihasilkan:

text
Hitungan: 3
Hitungan: 2
Hitungan: 1
Mulai!

Loop berjalan tiga kali — nilai 3, 2, 1 tercetak berurutan — lalu $hitungan bernilai 0 dan kondisi > 0 gagal. endwhile; menandai akhir blok, dan eksekusi lanjut ke echo "Mulai!\n";. Bentuk for ... endfor; dan foreach ... endforeach; bekerja dengan cara identik; keduanya akan tampil lengkap pada contoh template di bawah, dan pola dasarnya telah kita bahas pada chapter while Loops serta foreach Loops .

Template HTML dengan Sintaks Alternatif #

Inilah penggunaan utama sintaks ini: berkas yang didominasi HTML. Contoh berikut merender tabel produk — seluruh blok dapat dijalankan langsung dari terminal dan mencetak HTML ke layar:

php
<?php $produk = [
    ["nama" => "Kopi Torabika", "harga" => 15000, "stok" => 12],
    ["nama" => "Teh Melati", "harga" => 8000, "stok" => 0],
    ["nama" => "Gula Aren", "harga" => 12000, "stok" => 30],
]; ?>
<h2>Daftar Produk</h2>
<table>
<?php foreach ($produk as $item): ?>
    <tr>
        <td><?= htmlspecialchars($item["nama"]) ?></td>
        <td>Rp<?= number_format($item["harga"], 0, ",", ".") ?></td>
        <td><?= $item["stok"] > 0 ? "Tersedia" : "Habis" ?></td>
    </tr>
<?php endforeach; ?>
</table>

Output yang Dihasilkan:

text
<h2>Daftar Produk</h2>
<table>
    <tr>
        <td>Kopi Torabika</td>
        <td>Rp15.000</td>
        <td>Tersedia</td>
    </tr>
    <tr>
        <td>Teh Melati</td>
        <td>Rp8.000</td>
        <td>Habis</td>
    </tr>
    <tr>
        <td>Gula Aren</td>
        <td>Rp12.000</td>
        <td>Tersedia</td>
    </tr>
</table>

Mari kita bedah bagian-bagian pentingnya:

  1. Baris 1–5: data disiapkan dalam satu blok PHP di bagian atas, lalu ditutup dengan ?>. Pola “siapkan data dulu, baru cetak” menjaga logika tetap terkumpul di satu tempat.
  2. <?php foreach ($produk as $item): ?>: membuka perulangan dengan titik dua. Setiap kali loop berjalan, PHP mencetak <tr> beserta isinya sebagai HTML biasa.
  3. <?= ... ?>: tag echo singkat yang mencetak sebuah ekspresi langsung — <?= $x ?> sama persis dengan <?php echo $x ?>. htmlspecialchars() melindungi output dari karakter khusus HTML, dan number_format() memformat angka dengan pemisah ribuan gaya Indonesia.
  4. <?php endforeach; ?>: menutup perulangan. Kata kunci ini membuat pasangan pembukanya jelas tanpa perlu menghitung kurung.
  5. Ternary pada kolom stok: <?= $item["stok"] > 0 ? "Tersedia" : "Habis" ?> memilih teks sesuai kondisi — ekspresi ringkas yang cocok untuk template.

Bandingkan dengan versi kurung kurawal: penutup loop akan tertulis <?php } ?> — satu karakter { atau } mengapung di antara tag HTML tanpa identitas. Dengan endforeach;, mata kita langsung menemukan pasangan strukturnya. Manfaat ini juga dirasakan editor: lipatan kode (code folding) dan pencocokan penutup bekerja lebih akurat ketika struktur ditutup kata kunci bernama.

Kapan Sintaks Alternatif Dipakai #

Sintaks alternatif bukan pengganti kurung kurawal, melainkan pelengkapnya dengan wilayah kerja yang jelas. Gunakan sintaks alternatif pada berkas yang didominasi HTML — view, layout, partial, template email. Pada berkas PHP murni yang berisi logika, kurung kurawal lebih ringkas, lazim, dan padat. Yang harus dihindari adalah mencampur dua gaya dalam satu struktur yang sama, misalnya membuka foreach: lalu menutup dengan } — kode seperti itu tidak valid, dan percampuran gaya dalam satu berkas membuat pembaca harus menyesuaikan diri dua kali.

Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh di atas — versi kurung kurawal, if/endif, while/endwhile, hingga template HTML lengkap — dalam satu program utuh yang dapat Anda unduh dan jalankan langsung dengan php contoh.php.

Ringkasan #

Sintaks alternatif mengganti { dengan : dan } dengan kata kunci endif, endwhile, endfor, endforeach, atau endswitch — sementara do-while tidak memiliki bentuk alternatif. Manfaat utamanya muncul pada template HTML, tempat kata kunci penutup yang bernama membuat struktur PHP mudah dipasangkan oleh mata dan editor. Masih ada satu mekanisme kendali alur tertua yang belum kita bahas: goto beserta labelnya, topik chapter berikutnya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

contoh.php

Unduh berkas
php
<?php
// contoh.php — rangkuman sintaks alternatif dari chapter "Alternative Control
// Structure Syntax". Jalankan dengan: php contoh.php

echo "== Kurung kurawal di template ==\n";
$stok = 3;
?>
<p>Status stok:
<?php if ($stok > 0) { ?>
    Tersedia
<?php } else { ?>
    Habis
<?php } ?>
</p>
<?php
echo "\n== if dengan endif ==\n";
$saldo = 75000;

if ($saldo >= 50000):
    echo "Saldo cukup.\n";
    echo "Saldo saat ini: Rp$saldo\n";
elseif ($saldo > 0):
    echo "Saldo kurang, transaksi ditolak.\n";
else:
    echo "Saldo nol.\n";
endif;

echo "\n== while dengan endwhile ==\n";
$hitungan = 3;

while ($hitungan > 0):
    echo "Hitungan: $hitungan\n";
    $hitungan--;
endwhile;

echo "Mulai!\n";

echo "\n== Template HTML dengan sintaks alternatif ==\n";
$produk = [
    ["nama" => "Kopi Torabika", "harga" => 15000, "stok" => 12],
    ["nama" => "Teh Melati", "harga" => 8000, "stok" => 0],
    ["nama" => "Gula Aren", "harga" => 12000, "stok" => 30],
];
?>
<h2>Daftar Produk</h2>
<table>
<?php foreach ($produk as $item): ?>
    <tr>
        <td><?= htmlspecialchars($item["nama"]) ?></td>
        <td>Rp<?= number_format($item["harga"], 0, ",", ".") ?></td>
        <td><?= $item["stok"] > 0 ? "Tersedia" : "Habis" ?></td>
    </tr>
<?php endforeach; ?>
</table>