Menu

Class dan Objek PHP: Property, Method, dan $this

Class PHP adalah cetak biru yang dideklarasikan dengan class Name { }, dan new Name() membuat objek darinya. Pelajari property, method, $this, public/private/protected, property bertipe dan readonly, __toString, dan kenapa menyimpan objek ke variabel lain tidak menyalinnya.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Class PHP dideklarasikan dengan class Name { ... } dan berisi property (variabel) dan method (fungsi). new Name() membuat objek dari class itu, dan -> membaca property atau memanggil method: $user->name, $user->greet().

Class adalah cetak birunya, objek adalah satu benda yang dibuat dari cetak biru itu. Kamu bisa membuat objek sebanyak yang kamu butuhkan dari satu class, dan setiap objek punya nilai property-nya sendiri.

Property dan method

Property dideklarasikan dengan kata kunci visibilitas, tipe (opsional), dan nilai bawaan (opsional). Method adalah fungsi di dalam class. Di dalam method, $this adalah objek tempat method itu dipanggil, jadi $this->balance membaca saldo milik objek tersebut.

Setiap objek menyimpan $balance-nya sendiri: menyetor ke $a tidak menyentuh $b. Mengisi property satu per satu setelah new lama-lama merepotkan; constructor menerima nilai awalnya sebagai argumen.

public, private, dan protected

Visibilitas mengatur siapa yang boleh menyentuh property atau memanggil method:

Kata kunciBisa diakses dari
publicmana saja
protectedclass itu sendiri dan class yang meng-extend-nya
privatehanya class yang mendeklarasikannya

Membuat property menjadi private lalu menyediakan method adalah cara sebuah class melindungi aturannya sendiri. Di sini saldo hanya bisa berubah lewat deposit() dan withdraw(), yang menolak jumlah yang tidak valid:

Membaca property private dari luar class bukan sekadar warning, melainkan Error:

Property bertipe dan nilai yang belum diinisialisasi

Property bertipe tanpa nilai bawaan dimulai dalam keadaan belum diinisialisasi (uninitialized), yang berbeda dari null. Membacanya sebelum diisi apa pun akan melempar Error. Beri nilai bawaan, isi di constructor, atau buat nullable dengan ?Type dan = null.

Tipe ditegakkan saat pengisian. Dengan mode bawaan (non-strict), $p->stock = '7' mengonversi string numerik itu menjadi 7, sedangkan $p->stock = 'many' melempar TypeError.

Property readonly

Property readonly (PHP 8.1) bisa ditulis satu kali, dari dalam class, lalu tidak bisa ditulis lagi. Ini cara yang biasa untuk membuat value object seperti jumlah uang atau ID. PHP 8.2 menambahkan readonly class, yang membuat setiap property menjadi readonly.

Property readonly wajib punya tipe, dan tidak boleh punya nilai bawaan. Kalau kamu butuh salinan yang sudah diubah, buat objek baru (new Order('B-2002')) alih-alih mengedit yang lama.

Mencetak objek dengan __toString

echo $object hanya bekerja kalau class-nya mendefinisikan __toString(). Method ini mengembalikan string yang dipakai PHP setiap kali objek diperlakukan sebagai teks: di echo, dalam penggabungan string, di "{$object}".

Tanpa __toString, echo $object melempar Error ("Object of class Money could not be converted to string"). Untuk debugging, print_r() dan var_dump() bisa dipakai pada objek apa pun dan juga menampilkan property private; lihat var_dump dan print_r.

Menyimpan objek ke variabel lain tidak menyalinnya

Inilah kesalahan yang paling sering menjebak orang yang terbiasa dengan array. Menyimpan array ke variabel lain akan menyalinnya. Menyimpan objek hanya menyalin penunjuknya: kedua variabel lalu menunjuk ke objek yang sama.

clone membuat salinan dangkal: kalau sebuah property berisi objek lain, kedua salinan tetap berbagi objek di dalamnya itu. === bernilai true hanya untuk objek yang sama, sedangkan == membandingkan nilai property dari dua objek dengan class yang sama. Mengirim objek ke fungsi bekerja sama seperti pengisian variabel, jadi sebuah fungsi bisa mengubah objek yang diterimanya.

Pertanyaan yang sering diajukan

Bagaimana cara membuat objek dari class di PHP?

Pakai new dengan nama class-nya: $user = new User();. Kalau class itu punya constructor, berikan argumennya di dalam tanda kurung, seperti new User('Ada'). Setelah itu, panggil method dan baca property dengan operator panah: $user->name, $user->greet().

Apa arti $this di PHP?

$this adalah objek tempat method yang sedang berjalan dipanggil. Di dalam $ada->greet(), $this adalah $ada, jadi $this->name membaca nama Ada. Variabel ini hanya ada di dalam method yang tidak static.

Apa bedanya public, private, dan protected di PHP?

Anggota public bisa dipakai dari mana saja, anggota private hanya dari dalam class yang mendeklarasikannya, dan anggota protected dari class itu serta class turunannya. Membaca property private dari luar akan melempar Error: Cannot access private property.

Apakah objek di PHP dikirim lewat referensi?

Variabel menyimpan penunjuk (handle) ke objek, bukan objeknya sendiri. $b = $a; menyalin penunjuknya, jadi kedua variabel menunjuk ke objek yang sama dan perubahan lewat $b terlihat di $a. Pakai $b = clone $a; untuk mendapatkan salinan yang berdiri sendiri.

Apa itu property readonly di PHP?

Property yang dideklarasikan public readonly string $id; (PHP 8.1+) hanya bisa diisi sekali, dari dalam class, dan tidak bisa diubah sesudahnya. Menulisnya untuk kedua kalinya akan melempar Error: Cannot modify readonly property.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai