Menguasai kendali alur program di PHP: if/else, switch dan match expression, perulangan for/foreach/while dengan continue/break, lalu mendeklarasikan fungsi dengan parameter & return type, named arguments, variadic parameters, dan arrow function sebagai kunci menulis kode yang terstruktur dan bebas bug.

Di episode 4 kalian sudah mengenal variabel, tipe, dan operator. Sekarang saatnya mengubah data statis menjadi program yang mengambil keputusan dan berulang. Control flow dan fungsi adalah otot program — semua aplikasi nyata, dari form login sampai REST API, tersusun dari perulangan, percabangan, dan fungsi yang dipanggil.
Mengapa episode ini krusial? Karena pola pikir "bagaimana memecah masalah menjadi langkah kecil dan fungsi yang jelas" adalah pembeda antara kode yang bisa dipelihara dan spaghetti code. PHP menyediakan match expression dan arrow functions yang membuat kode lebih ringkas dan lebih aman daripada gaya lama.
if/else<?php
declare(strict_types=1);
$nilai = 85;
if ($nilai >= 90) {
$grade = "A";
} elseif ($nilai >= 75) {
$grade = "B";
} else {
$grade = "C";
}
echo "Grade: $grade\n";PHP juga mendukung sintaks alternatif if: ... endif; yang kadang dipakai di template (episode 15), tapi untuk kode biasa gunakan kurung kurawal standar.
switch vs matchmatch expression (PHP 8.0+) adalah pengganti modern untuk switch yang lebih aman dan ringkas:
// switch — verbose, butuh break
switch ($method) {
case "GET":
$handler = "baca";
break;
case "POST":
$handler = "tulis";
break;
default:
$handler = "baca";
}
// match — ekspresi, tanpa break, strict comparison
$handler = match ($method) {
"GET", "HEAD" => "baca",
"POST", "PUT", "PATCH" => "tulis",
default => "baca",
};Keunggulan match:
===), bukan loose == — menghilangkan jebakan tipe episode 4.break — setiap branch otomatis mengembalikan nilai.UnhandledMatchError jika tidak ada yang cocok dan tidak ada default.for, while, do/whilefor ($i = 0; $i < 5; $i++) {
echo $i, " ";
}
// 0 1 2 3 4
$i = 0;
while ($i < 5) {
echo $i, " ";
$i++;
}
$i = 0;
do {
echo $i, " ";
$i++;
} while ($i < 5);do/while dijamin mengeksekusi minimal sekali — cocok untuk validasi ulang input.
foreach untuk Arrayforeach adalah perulangan utama PHP karena PHP didominasi array:
$menu = [
"es-teh" => 3000,
"nasi-goreng" => 15000,
"sate-ayam" => 20000,
];
foreach ($menu as $nama => $harga) {
printf("%-14s Rp %s\n", $nama, number_format($harga));
}Dengan foreach, kita tidak perlu menghitung indeks manual. Untuk iterasi sambil mengubah nilai, pakai referensi dengan hati-hati (&$harga) dan unset() referensinya setelah loop — pola yang mudah salah.
continue dan breakcontinue melompat ke iterasi berikutnya.break keluar dari perulangan.continue 2; memengaruhi dua level perulangan bersarang.foreach ([1, 2, 3, 4, 5] as $n) {
if ($n % 2 === 0) {
continue; // lewati genap
}
if ($n > 4) {
break; // berhenti di 5
}
echo $n, " "; // 1 3
}Fungsi PHP modern selalu mengetik parameter dan return:
function hitungPajak(float $harga, float $persen = 11.0): float
{
return $harga * ($persen / 100);
}
echo hitungPajak(100000); // 11000
echo hitungPajak(100000, 5.0); // 5000Parameter opsional harus diletakkan setelah parameter wajib. Dengan strict_types=1, memanggil hitungPajak("100000", 5) akan melempar TypeError alih-alih konversi diam-diam.
neverfunction formatUang(int|float $jumlah): string
{
return "Rp " . number_format((float) $jumlah);
}
function cariPengguna(int $id): ?array
{
// ... kembalikan null jika tidak ditemukan
}int|float menerima keduanya; ?array berarti array|null. Tipe never (PHP 8.1+) menandakan fungsi yang tidak pernah mengembalikan nilai (selalu exit() atau melempar exception) — sering dipakai untuk helper validasi.
PHP 8.0 memperkenalkan named arguments — memanggil parameter berdasarkan nama, sehingga urutan dan kejelasan terjaga:
function kirimEmail(
string $to,
string $subject,
string $body,
bool $html = false
): bool {
return true;
}
kirimEmail(
to: "user@example.com",
subject: "Salam",
body: "Halo!",
);Sekaligus menghindari membawa 3 argumen false membabi-buta untuk sampai ke parameter ke-4.
Parameter ... menangkap banyak argumen menjadi array:
function jumlah(int ...$angka): int
{
return array_sum($angka);
}
echo jumlah(1, 2, 3, 4); // 10fnUntuk callback singkat, fn (PHP 7.4+) jauh lebih ringkas dan otomatis menangkap variabel luar:
$angka = [1, 2, 3, 4, 5];
$genap = array_filter($angka, fn (int $n): bool => $n % 2 === 0);
$kuadrat = array_map(fn (int $n): int => $n ** 2, $angka);
var_dump($genap, $kuadrat);fn hanya boleh berisi satu ekspresi, tetapi itu cukup untuk mayoritas callback di array_map, array_filter, dan usort.
Tip
match dan arrow function membuat kode PHP modern terasa seperti bahasa fungsional ringan. Namun gunakan dengan ukuran: jika logika lebih dari satu ekspresi, kembalikan ke blok if/else biasa atau fungsi bernama agar tetap mudah dibaca.
break di switch — fall-through tak disengaja; gunakan match untuk menghindarinya.foreach — menggunakan &$item dan lupa unset($item) setelah loop.strict_types, "100" diterima sebagai int dan bug lolos ke produksi.Inti yang harus dibawa pulang:
match alih-alih switch untuk percabangan berbasis nilai.for, while, foreach, serta continue/break untuk iterasi yang tepat.Di episode 6 selanjutnya kita membedah dua tipe paling sering dipakai di PHP: arrays & string — indexed dan associative array, array_map/filter/reduce, destructuring, lalu string interpolation, heredoc, dan fungsi string seperti str_contains dan mb_strlen. Ini akan menjadi senjata utama kalian untuk mengolah data.