Menu
CoddyTech

Property readonly (PHP 8.1)

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 19 dari 91.

PHP 8.1 memperkenalkan property readonly, yang hanya dapat diberi nilai satu kali dan tidak dapat diubah setelahnya. Berbeda dengan konstanta, property readonly ditetapkan saat inisialisasi object, bukan saat definisi class.

Kamu mendeklarasikan property readonly dengan menambahkan kata kunci readonly sebelum deklarasi tipe:

<?php
class User {
    public readonly string $id;
    public readonly string $name;
    
    public function __construct(string $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

$user = new User("U001", "Alice");
echo $user->id . "\n";
echo $user->name;

Output:

U001
Alice

Setelah ditetapkan, mencoba mengubah property yang hanya dapat dibaca akan menyebabkan error. Property seperti ini cocok untuk nilai yang harus tetap konstan selama masa hidup object, seperti ID atau stempel waktu pembuatan.

Properti readonly harus memiliki deklarasi tipe dan hanya dapat diberi nilai satu kali, dari dalam class yang mendeklarasikannya (biasanya di constructor). Tidak seperti properti biasa, properti ini tidak dapat diberi nilai default saat dideklarasikan. Properti ini dapat menggunakan modifier visibilitas apa pun:

<?php
class Product {
    public function __construct(
        public readonly string $sku,
        private readonly float $cost
    ) {}
    
    public function getCost(): float {
        return $this->cost;
    }
}

$product = new Product("ABC123", 29.99);
echo $product->sku;

output:

ABC123

Hal Penting: Properti readonly memberikan imutabilitas pada tingkat properti. Properti ini ideal untuk data yang mengidentifikasi object atau tidak boleh berubah setelah dibuat, karena menggabungkan fleksibilitas inisialisasi saat runtime dengan keamanan dari perubahan yang tidak disengaja.

challenge icon

Tantangan

Mudah

Mari kita buat sistem konfigurasi yang tidak dapat diubah dan menggunakan properti readonly untuk memastikan pengaturan penting tidak berubah secara tidak sengaja setelah inisialisasi.

Kamu akan membuat dua file yang bekerja sama untuk mengelola konfigurasi aplikasi:

  • Config.php: Definisikan class Config yang merepresentasikan konfigurasi aplikasi dengan pengaturan yang tidak dapat diubah. Class ini harus memiliki tiga properti readonly publik: string $appName, string $version, dan int $maxConnections. Gunakan promosi konstruktor untuk mendeklarasikan dan menginisialisasi ketiga properti readonly sekaligus dalam definisi konstruktor yang ringkas dan rapi. Tambahkan method getInfo() yang mengembalikan string dengan format "[appName] v[version] (max: [maxConnections] connections)".
  • main.php: Sertakan file class Config. Kamu akan menerima tiga input: nama aplikasi, versi, dan jumlah koneksi maksimum (sebagai string yang perlu dikonversi menjadi integer). Buat object Config menggunakan nilai-nilai ini. Cetak hasil getInfo() pada baris pertama. Lalu cetak setiap properti readonly pada barisnya sendiri dengan mengaksesnya secara langsung: nama aplikasi, versi, dan jumlah koneksi maksimum.

Properti readonly memastikan bahwa setelah konfigurasi dibuat, nilainya tetap terkunci, cocok untuk pengaturan yang harus tetap konstan selama runtime aplikasi. Perhatikan bagaimana promosi konstruktor yang dipadukan dengan readonly menghasilkan cara yang sangat ringkas untuk mendefinisikan object nilai yang tidak dapat diubah.

Output kamu harus menampilkan string info berformat, diikuti setiap nilai properti secara terpisah, untuk menunjukkan bahwa properti readonly tetap dapat dibaca dari luar class.

Coba sendiri

<?php

require_once 'Config.php';

// Baca input
$appName = trim(fgets(STDIN));
$version = trim(fgets(STDIN));
$maxConnections = intval(trim(fgets(STDIN)));

// TODO: Buat object Config menggunakan nilai input

// TODO: Cetak hasil getInfo()

// TODO: Cetak setiap property readonly pada baris tersendiri:
// - nama aplikasi
// - versi
// - jumlah koneksi maksimum

?>
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