Menu
CoddyTech

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.99

Dengan 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.

challenge icon

Tantangan

Mudah

Mari 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 class Contact dengan menggunakan promosi konstruktor untuk mendefinisikan semua property langsung dalam signature konstruktor. Kontakmu harus memiliki:
    • Property $name privat (string)
    • Property $email privat (string)
    • Property $phone privat (string) dengan nilai default "Not provided"
    Gunakan sintaks promosi konstruktor: kamu tidak perlu deklarasi property terpisah! Tambahkan method publik getFullDetails() yang mengembalikan "[name] | [email] | [phone]". Tambahkan juga method getSummary() yang mengembalikan "Contact: [name]".
  • main.php: Sertakan file Contact. Kamu akan menerima tiga input: nama, email, dan nomor telepon. Buat dua instance Contact:
    • Kontak pertama harus menggunakan ketiga nilai (nama, email, dan nomor telepon)
    • Kontak kedua harus menggunakan nama dan email saja (mengandalkan nilai default nomor telepon)
    Cetak empat baris:
    • 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

?>
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online