Pendahuluan — dari “ada class” ke “isi class”
Di Mengenal OOP PHP (#53) kamu sudah melihat class sebagai cetakan dan new sebagai cara membuat object. Artikel ini adalah #54 (ini) — langkah kedua jembatan OOP PHP sebelum Laravel.
Fokusnya sederhana: property (data), method (perilaku), dan constructor (cara object “lahir” siap pakai). Kalau analoginya buku: property = judul & penulis; method = “tampilkan info”; constructor = mengisi data saat buku dicatat pertama kali.
Prasyarat: sudah baca Mengenal OOP PHP (#53) atau setidaknya pernah membuat
class+newdi PHP. Domain tetap perpustakaan mini.
Tiga kata yang sering campur
| Istilah | Arti awam | Contoh di Buku |
|---|---|---|
| Property | Data yang “nempel” di object | $judul, $penulis |
| Method | Perilaku / pertanyaan ke object | info(), ringkas() |
| Constructor | Langkah otomatis saat new |
__construct(...) |
Jangan hafal dulu. Baca tabel di atas sekali, lalu ikuti contoh di bawah — otak akan mengaitkan sendiri.
Property — data yang nempel
Property ditulis di dalam class. Setelah object dibuat, kamu mengaksesnya dengan -> (bukan titik seperti Python).
<?php
class Buku
{
public string $judul;
public string $penulis;
}
$buku = new Buku();
$buku->judul = "Belajar PHP";
$buku->penulis = "Sari";
echo $buku->judul, " oleh ", $buku->penulis, PHP_EOL;
Output:
Belajar PHP oleh Sari
public artinya “boleh diakses dari luar class”. Nanti di artikel berikutnya kita pelajari kenapa kadang data perlu disembunyikan (private). Untuk sekarang, public cukup agar pola kelihatan jelas.
Type hint string $judul = property ini diharapkan berisi teks. Kalau kamu iseng mengisi angka, PHP 8+ akan protes — itu membantu, bukan mengganggu.
Kenapa contoh pertama belum pakai constructor? Supaya kamu lihat dulu “property itu kotak data”. Sebentar lagi kita rapikan pengisiannya lewat __construct agar object tidak lahir kosong.
Method — minta object melakukan sesuatu
Method adalah fungsi di dalam class. Ia bisa membaca property lewat $this->... ($this = “object yang sedang berbicara”).
<?php
class Buku
{
public string $judul;
public string $penulis;
public function info(): string
{
return "{$this->judul} oleh {$this->penulis}";
}
}
$buku = new Buku();
$buku->judul = "Laravel Praktis";
$buku->penulis = "Budi";
echo $buku->info(), PHP_EOL;
Output:
Laravel Praktis oleh Budi
Kenapa tidak terus tulis $buku->judul di mana-mana? Karena aturan tampilan (format, urutan, tambahan tahun) cukup di satu method. Ubah sekali, semua pemanggil ikut rapi.
$this untuk membaca data object itu sendiri.Constructor — lahir sudah lengkap
Mengisi property satu per satu setelah new mudah lupa. Constructor (__construct) jalan otomatis saat new Buku(...).
<?php
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})";
}
}
$buku = new Buku("Belajar PHP", "Sari", 2024);
echo $buku->info(), PHP_EOL;
Output:
Belajar PHP oleh Sari (2024)
Baca perlahan: argumen di new Buku(...) masuk ke parameter constructor, lalu disimpan ke property lewat $this->.... Object lahir sudah punya data — siap dipanggil method-nya.
Type hint — petunjuk tipe (lanjutan dari pengantar)
Di Mengenal OOP PHP (#53) kita bilang type hint = petunjuk. Di sini sedikit lebih dalam, tetap tanpa drama:
string= teksint= bilangan bulat (tahun, jumlah halaman): stringsetelah method = nilai balik berupa teks: void= method tidak mengembalikan nilai (sering untuk “cetak saja”)
Kamu belum wajib hafal semua tipe. Cukup biasakan menulisnya di constructor dan method penting — editor dan PHP akan membantu menangkap salah isi lebih awal.
Pola Dasar — property, method, constructor
-
1
Tulis property dulu Data apa yang wajib ada di setiap Buku?
-
2
Isi lewat constructor
new Buku(...)= lahir lengkap, bukan object “bolong”. -
3
Bungkus aturan di method
info()/ringkas()— jangan copy-paste format di mana-mana. -
4
Pakai
$this->di dalam class Di luar class:$buku->info(). Di dalam method:$this->judul. -
5
Baru pikir visibility Artikel berikutnya:
private/ composition ringan — siap ke Laravel.
Kode lengkap — oop_php_property.php
Simpan dan jalankan: php oop_php_property.php. declare(strict_types=1); membuat PHP lebih ketat soal tipe — boleh dianggap “sabuk pengaman”, bukan materi hafalan.
<?php
/**
* Property, method, constructor (Seri 4 #54).
* Lanjut: visibility & composition di artikel berikutnya.
*/
declare(strict_types=1);
class Buku
{
public string $judul;
public string $penulis;
public int $tahun;
public string $isbn;
public function __construct(string $judul, string $penulis, int $tahun, string $isbn)
{
$this->judul = $judul;
$this->penulis = $penulis;
$this->tahun = $tahun;
$this->isbn = $isbn;
}
public function info(): string
{
return "{$this->judul} oleh {$this->penulis} ({$this->tahun})";
}
public function ringkas(): string
{
return "{$this->judul} [{$this->isbn}]";
}
}
function demo(): void
{
$koleksi = [
new Buku("Belajar PHP", "Sari", 2024, "978-0001"),
new Buku("Laravel Praktis", "Budi", 2025, "978-0002"),
];
foreach ($koleksi as $buku) {
echo $buku->info(), PHP_EOL;
echo $buku->ringkas(), PHP_EOL;
}
echo "jumlah=", count($koleksi), PHP_EOL;
}
demo();
Output yang diharapkan:
Belajar PHP oleh Sari (2024)
Belajar PHP [978-0001]
Laravel Praktis oleh Budi (2025)
Laravel Praktis [978-0002]
jumlah=2
Kesalahan umum
| Gejala | Penyebab tipikal | Perbaikan |
|---|---|---|
| Property null / kosong | Lupa isi setelah new |
Pindahkan pengisian ke __construct |
Undefined property |
Typo nama property | Samakan ejaan di class, constructor, dan pemakaian |
$this di luar class |
Salah tempat | $this hanya di dalam method class |
Pakai . seperti Python |
Salah operator | Object PHP: -> |
| Method terlalu gemuk | Semua logika digabung | Pecah: info() vs ringkas() dulu |
Latihan singkat
- Tambah property
int $halamanke constructor dan tampilkan diinfo(). - Buat method
label(): stringyang mengembalikan hanya$this->judul. - Tambah object ketiga di
demo()dan pastikanjumlah=menjadi 3.
FAQ singkat
Harus selalu pakai constructor?
Untuk object yang “wajib punya data”, ya — lebih aman. Object kosong lalu diisi manual mudah terlupakan.
Apa bedanya property dan variabel biasa?
Variabel biasa hidup di satu tempat (fungsi/skrip). Property hidup bersama object selama object itu ada.
Kapan belajar private?
Artikel jembatan berikutnya (visibility & composition). Di sini kita sengaja pakai public agar pola kelihatan dulu.
Lanjut ke mana?
Berikutnya: visibility & composition ringan di PHP — pintu terakhir sebelum Laravel.
Kesimpulan & langkah berikutnya
Property = data. Method = perilaku. Constructor = lahir lengkap. Tiga ide ini yang akan kamu bawa ke Form Request, service, dan model di Laravel nanti — bedanya nanti kebanyakan “di mana file-nya”, bukan “apa ide-nya”.
Artikel ini adalah #54 (ini) — lanjut dari OOP PHP pengantar (#53).
Seri 4 progress: langkah #54 (ini) · 2/8 menuju Capstone Laravel · jembatan OOP PHP 2/3 · prasyarat: OOP PHP pengantar (#53) LIVE. Berikutnya: visibility & composition PHP.