Promosi Constructor (8.0)
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 42 dari 91.
PHP 8.0 memperkenalkan promosi constructor, fitur yang sangat mengurangi kode boilerplate saat mendefinisikan class. Alih-alih mendeklarasikan property secara terpisah lalu menetapkannya di constructor, kamu bisa melakukan keduanya sekaligus.
Berikut pendekatan tradisional yang selama ini kamu gunakan:
<?php
class Product {
private string $name;
private float $price;
public function __construct(string $name, float $price) {
$this->name = $name;
$this->price = $price;
}
public function getInfo(): string {
return $this->name . ": $" . $this->price;
}
}
Dengan promosi konstruktor, kamu menambahkan modifier akses langsung ke parameter konstruktor:
<?php
class Product {
public function __construct(
private string $name,
private float $price
) {}
public function getInfo(): string {
return $this->name . ": $" . $this->price;
}
}
$product = new Product("Laptop", 999.99);
echo $product->getInfo();
Output:
Laptop: $999.99Dengan menambahkan private, protected, atau public sebelum parameter constructor, PHP secara otomatis membuat property dan menetapkan nilainya. Kamu bisa mencampur parameter yang dipromosikan dan parameter biasa dalam constructor yang sama, dan kamu tetap bisa menambahkan logika di dalam badan constructor jika perlu.
Poin Penting: Promosi constructor menghilangkan deklarasi dan penetapan property yang berulang, sehingga class-mu lebih rapi dan mudah dibaca sekaligus tetap mempertahankan kendali enkapsulasi sepenuhnya.
Tantangan
MudahMari kita buat sistem pengelolaan kontak yang menunjukkan keunggulan promosi konstruktor. Kamu akan membuat class PHP yang rapi dan modern, yang menghilangkan kode boilerplate sekaligus tetap menjaga enkapsulasi dengan benar.
Kamu akan menyusun kodemu dalam dua file:
Contact.php: Buat classContactdengan menggunakan promosi konstruktor untuk mendefinisikan semua property langsung dalam signature konstruktor. Kontakmu harus memiliki:- Property
$nameprivat (string) - Property
$emailprivat (string) - Property
$phoneprivat (string) dengan nilai default"Not provided"
getFullDetails()yang mengembalikan"[name] | [email] | [phone]". Tambahkan juga methodgetSummary()yang mengembalikan"Contact: [name]".- Property
main.php: Sertakan file Contact. Kamu akan menerima tiga input: nama, email, dan nomor telepon. Buat dua instanceContact:- Kontak pertama harus menggunakan ketiga nilai (nama, email, dan nomor telepon)
- Kontak kedua harus menggunakan nama dan email saja (mengandalkan nilai default nomor telepon)
- Detail lengkap kontak pertama
- Ringkasan kontak pertama
- Detail lengkap kontak kedua
- Ringkasan kontak kedua
Perhatikan bagaimana promosi konstruktor memungkinkan kamu mendefinisikan property, mengatur visibilitasnya, mendeklarasikan tipenya, dan menetapkan nilainya, semuanya dalam satu signature konstruktor yang mudah dibaca. Parameter nomor telepon opsional dengan nilai default menunjukkan bahwa parameter yang dipromosikan dapat digunakan dengan lancar bersama nilai default, sama seperti parameter biasa.
Coba sendiri
<?php
require_once 'Contact.php';
// Baca input
$name = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));
// TODO: Buat kontak pertama dengan ketiga nilai (name, email, phone)
// TODO: Buat kontak kedua hanya dengan name dan email (gunakan phone bawaan)
// TODO: Cetak detail lengkap kontak pertama
// TODO: Cetak ringkasan kontak pertama
// TODO: Cetak detail lengkap kontak kedua
// TODO: Cetak ringkasan kontak kedua
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online