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. Tidak seperti konstanta, property readonly ditetapkan selama inisialisasi object, bukan saat class didefinisikan.

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 readonly akan menyebabkan error. Ini membuatnya cocok untuk nilai yang harus tetap konstan selama masa hidup object, seperti ID atau stempel waktu pembuatan.

property readonly harus memiliki deklarasi tipe dan hanya dapat diberi nilai sekali, dari dalam class yang mendeklarasikannya (biasanya di constructor). Tidak seperti property biasa, property readonly tidak dapat diberi nilai default saat dideklarasikan. Property readonly 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

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

challenge icon

Tantangan

Mudah

Mari kita buat sistem konfigurasi yang tidak dapat diubah dengan menggunakan property readonly untuk memastikan pengaturan penting tidak sengaja diubah setelah inisialisasi.

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

  • Config.php: Definisikan class Config yang mewakili konfigurasi aplikasi dengan pengaturan yang tidak dapat diubah. Class ini harus memiliki tiga property readonly publik: string $appName, string $version, dan int $maxConnections. Gunakan promosi constructor untuk mendeklarasikan dan menginisialisasi ketiga property readonly dalam satu definisi constructor yang ringkas. 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 property readonly pada barisnya sendiri dengan mengaksesnya secara langsung: nama aplikasi, versi, dan jumlah koneksi maksimum.

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

Output-mu harus menampilkan string info berformat, lalu setiap nilai property satu per satu, untuk menunjukkan bahwa property 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