Belajar PHP - Control Flow & Fungsi
Episode 5 of 23

Belajar PHP - Control Flow & Fungsi

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.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Percabangan: if/else

if/else dasar
<?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 match

match expression (PHP 8.0+) adalah pengganti modern untuk switch yang lebih aman dan ringkas:

switch vs match
// 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:

  • Strict comparison (===), bukan loose == — menghilangkan jebakan tipe episode 4.
  • Merupakan ekspresi: hasilnya bisa langsung di-assign.
  • Tanpa break — setiap branch otomatis mengembalikan nilai.
  • Melempar UnhandledMatchError jika tidak ada yang cocok dan tidak ada default.

Perulangan

for, while, do/while

Tiga bentuk perulangan
for ($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 Array

foreach adalah perulangan utama PHP karena PHP didominasi array:

foreach untuk 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 break

  • continue melompat ke iterasi berikutnya.
  • break keluar dari perulangan.
  • Keduanya menerima level: continue 2; memengaruhi dua level perulangan bersarang.
continue dan break
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

Deklarasi dengan Type Declaration

Fungsi PHP modern selalu mengetik parameter dan return:

Fungsi dengan tipe
function hitungPajak(float $harga, float $persen = 11.0): float
{
    return $harga * ($persen / 100);
}
 
echo hitungPajak(100000);        // 11000
echo hitungPajak(100000, 5.0);   // 5000

Parameter opsional harus diletakkan setelah parameter wajib. Dengan strict_types=1, memanggil hitungPajak("100000", 5) akan melempar TypeError alih-alih konversi diam-diam.

Union, Nullable, dan never

Union & nullable type
function 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.

Named Arguments

PHP 8.0 memperkenalkan named arguments — memanggil parameter berdasarkan nama, sehingga urutan dan kejelasan terjaga:

Named arguments
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.

Variadic Parameters

Parameter ... menangkap banyak argumen menjadi array:

Variadic parameter
function jumlah(int ...$angka): int
{
    return array_sum($angka);
}
 
echo jumlah(1, 2, 3, 4);   // 10

Arrow Function dan fn

Untuk callback singkat, fn (PHP 7.4+) jauh lebih ringkas dan otomatis menangkap variabel luar:

Arrow function
$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.

Common Pitfalls

  • Lupa break di switch — fall-through tak disengaja; gunakan match untuk menghindarinya.
  • Mutasi array saat foreach — menggunakan &$item dan lupa unset($item) setelah loop.
  • Type coercion di fungsi — tanpa strict_types, "100" diterima sebagai int dan bug lolos ke produksi.
  • Fungsi panjang tanpa pemecahan — tanda bahwa fungsi melakukan terlalu banyak hal; pecah menjadi fungsi kecil bernama jelas.

Penutup

Inti yang harus dibawa pulang:

  • Gunakan match alih-alih switch untuk percabangan berbasis nilai.
  • Kuasai for, while, foreach, serta continue/break untuk iterasi yang tepat.
  • Fungsi selalu punya type declaration untuk parameter dan return.
  • Manfaatkan named arguments, variadic, dan arrow function untuk kode yang ekspresif.

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.

Belajar PHP - Control Flow & Fungsi | Belajar PHP