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
AliceSetelah 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:
ABC123Hal 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.
Tantangan
MudahMari 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 classConfigyang merepresentasikan konfigurasi aplikasi dengan pengaturan yang tidak dapat diubah. Class ini harus memiliki tiga properti readonly publik:string $appName,string $version, danint $maxConnections. Gunakan promosi konstruktor untuk mendeklarasikan dan menginisialisasi ketiga properti readonly sekaligus dalam definisi konstruktor yang ringkas dan rapi. Tambahkan methodgetInfo()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 objectConfigmenggunakan nilai-nilai ini. Cetak hasilgetInfo()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
?>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