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
<?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
Tentukan benda Buku, anggota, peminjaman — bukan “halaman PHP acak”.
-
2
Tulis class sebagai cetakan Property = data · method = perilaku.
-
3
Buat object dengan
newIsi lewat constructor agar object lahir siap pakai. -
4
Panggil method, bukan utak-atik array
$buku->info()lebih jelas daripada$buku["judul"]tersebar. -
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
- Tambah property
isbn(string) keBukudan tampilkan diinfo(). - Buat object ketiga di
demo()lalu pastikanjumlah=menjadi 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.