Pendahuluan — Seri 4 dimulai dari cara berpikir

Seri 3 di Koding Indonesia sudah mengajarkan OOP dengan Python (#40) sampai pintu web stub di Flask/FastAPI (#52). Seri 4 bergeser ke jalur yang selaras stack site ini: PHP dulu (OOP), baru Laravel untuk API nyata.

Artikel ini adalah #53 (ini) — pembuka jembatan OOP PHP. Kamu belum wajib pernah menulis class di PHP. Yang dibutuhkan: rasa ingin paham kenapa objek membantu sebelum menumpuk route Laravel.

Prasyarat ringan: pernah menulis variabel dan fungsi (bahasa apa saja). Kalau sudah selesai Seri 3 Python, konsepnya sama — sintaksnya yang beda. Domain contoh tetap perpustakaan mini.

Soft-landing PHP (5 menit)

Contoh di Seri 4 memakai PHP 8.2+ (di mesin Kindo lokal sering 8.4). Cek di terminal:

php --version
# contoh: PHP 8.4.x

Dua sintaks yang cukup untuk membaca artikel ini:

<?php
// variabel
$judul = "Dasar OOP";
$halaman = 120;

// fungsi
function sapa(string $nama): string
{
    return "Halo, {$nama}!";
}

echo sapa("Anton"), PHP_EOL;

Output:

Halo, Anton!

Catatan singkat: string $nama): string adalah type hint — petunjuk tipe data (di sini: teks). Belum wajib dihafal; cukup tahu artinya “fungsi ini menerima dan mengembalikan string”. PHP_EOL = baris baru di terminal.

Simpan berkas .php lalu jalankan: php nama_file.php. Editor: VS Code + ekstensi PHP sudah cukup.

Masalah yang OOP coba selesaikan

Versi prosedural (data + fungsi terpisah) cepat berantakan saat aturan buku bertambah:

<?php
$bukuA = ["judul" => "Belajar PHP", "penulis" => "Sari", "tahun" => 2024];
$bukuB = ["judul" => "Laravel Praktis", "penulis" => "Budi", "tahun" => 2025];

function infoBuku(array $buku): string
{
    return $buku["judul"] . " oleh " . $buku["penulis"] . " (" . $buku["tahun"] . ")";
}

function pinjam(array $buku, string $anggota): void
{
    echo $anggota . " meminjam " . $buku["judul"], PHP_EOL;
}

echo infoBuku($bukuA), PHP_EOL;
pinjam($bukuB, "Rina");

Output:

Belajar PHP oleh Sari (2024)
Rina meminjam Laravel Praktis

Satu typo key ("Judul" vs "judul") sudah cukup bikin bug diam-diam. Semakin banyak fitur, semakin banyak fungsi yang harus “mengingat” bentuk array yang sama.

OOP menggabungkan data dan perilaku terkait ke dalam objek. Class = cetakan; object = barang konkret.

Class vs object — cetakan dan barangnya

class = cetakan · object = instance class Buku judul, penulis info() $bukuA $bukuB data beda perilaku sama
Satu class, banyak object — pola yang sama nanti dipakai model/service di Laravel.
<?php
class Buku
{
    public string $judul;
    public string $penulis;

    public function __construct(string $judul, string $penulis)
    {
        $this->judul = $judul;
        $this->penulis = $penulis;
    }

    public function info(): string
    {
        return "{$this->judul} oleh {$this->penulis}";
    }
}

$bukuA = new Buku("Belajar PHP", "Sari");
$bukuB = new Buku("Laravel Praktis", "Budi");
echo $bukuA->info(), PHP_EOL;
echo $bukuB->info(), PHP_EOL;

Output:

Belajar PHP oleh Sari
Laravel Praktis oleh Budi

new Buku(...) membuat object. Method info() dipanggil dengan -> (bukan titik seperti Python).

Kenapa ini penting sebelum Laravel?

Tanpa OOP Gejala di web Dengan OOP ringan
Array “liar” di route (URL handler) Controller jadi gudang logika Class Buku / service memegang aturan
Copy-paste validasi Bug beda di tiap endpoint (alamat API) Satu tempat ubah, banyak pemakai
Langsung model database “aja” Bingung mana aturan bisnis vs framework Dulu paham object, baru map ke model

Laravel nanti menyediakan route, request, dan akses data. Yang tidak diganti framework: cara kamu memotong masalah jadi objek.

Pola Dasar — berpikir objek di PHP

  1. 1
    Tentukan benda Buku, anggota, peminjaman — bukan “halaman PHP acak”.
  2. 2
    Tulis class sebagai cetakan Property = data · method = perilaku.
  3. 3
    Buat object dengan new Isi lewat constructor agar object lahir siap pakai.
  4. 4
    Panggil method, bukan utak-atik array $buku->info() lebih jelas daripada $buku["judul"] tersebar.
  5. 5
    Baru bawa ke framework Artikel berikutnya: property/method lebih dalam — lalu Laravel.

Kode lengkap — oop_php_dasar.php

Simpan dan jalankan: php oop_php_dasar.php. Baris declare(strict_types=1); membuat PHP lebih ketat soal tipe — aman diabaikan dulu; yang penting pola class + new + method.

<?php
/**
 * OOP PHP dasar (Seri 4 #53).
 * Lanjut: property/method/constructor lebih dalam di artikel berikutnya.
 */

declare(strict_types=1);

class Buku
{
    public string $judul;
    public string $penulis;
    public int $tahun;

    public function __construct(string $judul, string $penulis, int $tahun)
    {
        $this->judul = $judul;
        $this->penulis = $penulis;
        $this->tahun = $tahun;
    }

    public function info(): string
    {
        return "{$this->judul} oleh {$this->penulis} ({$this->tahun})";
    }
}

function demo(): void
{
    $koleksi = [
        new Buku("Belajar PHP", "Sari", 2024),
        new Buku("Laravel Praktis", "Budi", 2025),
    ];

    foreach ($koleksi as $buku) {
        echo $buku->info(), PHP_EOL;
    }

    echo "jumlah=", count($koleksi), PHP_EOL;
}

demo();

Output yang diharapkan:

Belajar PHP oleh Sari (2024)
Laravel Praktis oleh Budi (2025)
jumlah=2

Kesalahan umum

Gejala Penyebab tipikal Perbaikan
php tidak ketemu PATH / XAMPP belum siap Pakai full path PHP atau terminal yang sudah dikonfigurasi
Pakai . seperti Python Salah operator Object di PHP: -> · static: ::
Lupa <?php File dianggap teks Mulai berkas dengan tag pembuka
Array tetap dipakai di mana-mana Class hanya “hiasan” Pindahkan aturan ke method object
Langsung buka Laravel Loncat fondasi Selesaikan jembatan OOP PHP dulu (tiga artikel sebelum Laravel)

Latihan singkat

  1. Tambah property isbn (string) ke Buku dan tampilkan di info().
  2. Buat object ketiga di demo() lalu pastikan jumlah= menjadi 3.
  3. Tuliskan di kertas: tiga “benda” di aplikasi perpustakaan yang layak jadi class (selain Buku).

FAQ singkat

Harus hapus pengetahuan Python OOP?
Tidak. Konsep class/object sama. Seri 4 melatih sintaks PHP agar jalan ke Laravel mulus.

Apakah ini sudah encapsulation lengkap?
Belum. Visibility private/protected dibahas di artikel jembatan berikutnya.

Kapan mulai Laravel?
Setelah jembatan OOP PHP selesai (pengantar -> property/constructor -> visibility). Sabar dulu — fondasi objek lebih dulu, framework belakangan.

Lanjut ke mana?
Berikutnya: property, method, dan constructor lebih dalam di PHP (artikel berikutnya di Seri 4).

Kesimpulan & langkah berikutnya

OOP bukan soal “pakai class biar keren”. Ia cara merapikan data + perilaku supaya siap dibawa ke web framework tanpa controller jadi tempat sampah.

Artikel ini adalah #53 (ini) — pembuka Seri 4 setelah pintu OOP web Python di Flask/FastAPI (#52).

Seri 4 progress: langkah #53 (ini) · 1/8 menuju Capstone Laravel · jembatan OOP PHP 1/3 · prasyarat konsep: OOP Python (#40) opsional · Flask/FastAPI (#52) LIVE. Berikutnya: property & constructor PHP.