Jumat, 11 August 2023

Mengenal Readonly Properties Pada PHP 8.1

Dalam perjalanan PHP yang terus berkembang, versi 8.1 membawa sejumlah fitur baru yang menarik, salah satunya adalah Readonly Properties.

Intro

Dalam perjalanan PHP yang terus berkembang, versi 8.1 membawa sejumlah fitur baru yang menarik, salah satunya adalah Readonly Properties.

Fitur ini memungkinkan Anda untuk mendefinisikan properti yang tidak dapat diubah setelah diinisialisasi, memberikan tingkat keamanan dan ketegasan yang lebih besar dalam kode Anda.

Ingin tahu bagaimana hal ini dapat mengubah cara Anda menulis dan merancang aplikasi? Bergabunglah dengan kami dalam eksplorasi mendetail tentang Readonly Properties, sebuah langkah maju dalam pengembangan PHP yang efisien dan aman.

Fitur ini memungkinkan pengembang untuk membuat properti yang tidak bisa diubah setelah diatur, membawa manfaat besar dalam mengamankan dan mengklarifikasi kode. Mari kita jelajahi lebih dalam tentang readonly properties dalam PHP .

Apa Itu Properti Readonly?

Properti Readonly adalah sebuah konsep dalam pemrograman yang merujuk pada variabel atau properti yang hanya dapat ditulis atau diinisialisasi sekali, dan setelah itu tidak dapat diubah lagi.

Dalam konteks PHP 8.1, properti Readonly diperkenalkan sebagai salah satu fitur baru. Hal ini memungkinkan pengembang untuk mendeklarasikan properti dalam kelas sebagai "read-only", yang berarti setelah properti tersebut diinisialisasi dalam konstruktor, nilainya tidak dapat diubah.

Ini adalah cara yang efektif untuk memastikan bahwa nilai properti tertentu tetap konsisten selama siklus hidup objek, dan membantu mencegah perubahan yang tidak disengaja yang dapat menyebabkan bug atau perilaku yang tidak diinginkan.

Cara Menggunakannya

Untuk mendefinisikan properti readonly, cukup tambahkan kata kunci "readonly" sebelum nama properti pada deklarasi kelas. Contohnya:

class BlogData
{
    public readonly string $title;
    public readonly Status $status;
    public readonly ?DateTimeImmutable $publishedAt = null;
}

Keamanan yang Ditingkatkan

Dengan properti readonly, Anda dapat merasa yakin bahwa setelah nilai properti diatur saat pembuatan objek, nilai tersebut tidak akan berubah lagi. Contohnya, perubahan nilai seperti ini akan menghasilkan error:

$blog = new BlogData('PHP 8: properti readonly');

$blog->title = 'Judul lain';

// Error: Tidak bisa mengubah properti readonly BlogData::$title

Manfaat Properti Readonly

Properti readonly memiliki manfaat yang signifikan dalam beberapa situasi, seperti:

  • Objek Data Transfer (DTO): DTO adalah objek yang digunakan untuk mengirim data antar sistem. Dengan properti readonly, data dalam DTO tidak dapat diubah setelah DTO dibuat, memastikan data yang dikirim tetap konsisten.
  • Objek Nilai (VO): VO adalah objek yang merepresentasikan nilai tunggal. Properti readonly pada VO mencegah perubahan nilai setelah objek dibuat, menjaga integritas nilai tersebut.
  • Data Sensitif: Properti readonly dapat digunakan pada objek yang memegang data sensitif, mencegah perubahan tidak sengaja yang dapat mengancam keamanan.

Penting Sekali

Ada beberapa hal yang perlu diperhatikan dalam penggunaan properti readonly:

Mewajibkan tipe data

Properti readonly pada PHP 8 memiliki batasan yang penting untuk diperhatikan: properti readonly hanya dapat digunakan dengan properti yang memiliki tipe data tertentu. Ini berarti bahwa Anda harus menentukan tipe data dari properti tersebut saat mendeklarasikannya sebagai readonly.

Contoh penggunaan properti readonly dengan tipe data:

class Product
{
    public readonly string $name; // Properti dengan tipe data string
    public readonly float $price;  // Properti dengan tipe data float
}

Dalam contoh di atas, properti $name memiliki tipe data string dan properti $price memiliki tipe data float. Properti-properti ini dapat dideklarasikan sebagai readonly karena memiliki tipe data yang jelas.

Namun, jika Anda mencoba menggunakan properti tanpa tipe data, maka properti tersebut tidak dapat dijadikan readonly:

class InvalidProduct
{
    public readonly $data; // Properti tanpa tipe data, tidak dapat menjadi readonly
}

Penyebabnya adalah bahwa tanpa tipe data yang jelas, PHP tidak dapat memastikan bagaimana memperlakukan properti tersebut sebagai readonly dengan benar. Properti readonly harus memiliki tipe data yang spesifik agar dapat bekerja dengan baik dalam memastikan integritas dan keamanan data dalam objek.

Jadi, inti dari konsep ini adalah bahwa properti readonly hanya dapat dideklarasikan pada properti yang memiliki tipe data yang ditentukan. Hal ini membantu dalam memastikan bahwa nilai properti tersebut tetap aman dan tidak dapat diubah setelah objek dibuat.

Tidak boleh menggunakan default value

Properti readonly pada PHP 8 memiliki satu batasan penting lagi: properti readonly tidak boleh memiliki nilai default. Ini berarti bahwa Anda tidak dapat memberikan nilai awal kepada properti readonly pada saat deklarasi.

Contoh penggunaan yang benar:

class Product {
    public readonly string $name;
    public readonly float $price;
}

Contoh penggunaan yang salah (dengan nilai default):

class InvalidProduct {
    public readonly string $name = 'Default Name'; // Ini tidak diperbolehkan
}

Alasan di balik larangan ini adalah bahwa properti readonly harus nilainya hanya diatur sekali, yaitu saat pembuatan objek. Jika Anda memberikan nilai default, maka nilai ini seolah-olah diatur dua kali - pertama oleh nilai default dan kedua oleh nilai pada saat pembuatan objek. Hal ini dapat menimbulkan ambiguitas dan mengurangi kejelasan mengenai nilai properti.

Dengan membatasi properti readonly untuk tidak memiliki nilai default, PHP memastikan bahwa nilai-nilai properti tersebut benar-benar terkunci setelah objek dibuat, dan tidak ada nilai yang ambigu yang akan diterapkan. Ini merupakan langkah penting dalam menjaga integritas dan keandalan objek dalam penggunaan properti readonly.

Unset tidak diperbolehkan

Dalam konteks PHP 8, properti readonly memiliki sifat yang kuat dan tidak dapat diubah setelah objek dibuat. Salah satu batasan pentingnya adalah bahwa properti readonly tidak dapat dihapus setelah dideklarasikan dalam kelas.

Ini berarti bahwa setelah Anda mendeklarasikan properti sebagai readonly, Anda tidak dapat menghapus properti tersebut dari kelas tersebut. Contoh penggunaan yang tidak diperbolehkan:

class Product {
    public readonly string $name;
}
unset(Product::$name); // Ini tidak diperbolehkan

Larangan ini ada untuk menjaga integritas objek yang sudah dibuat. Jika Anda diizinkan menghapus properti readonly, hal ini dapat mengakibatkan kebingungan dalam penggunaan objek dan nilai-nilai properti yang sudah ada.

Dengan membatasi penghapusan properti readonly, PHP memastikan bahwa objek yang menggunakan properti tersebut tetap konsisten dan tidak dapat dirubah setelah objek dibuat. Hal ini sesuai dengan tujuan utama dari fitur readonly, yaitu untuk menciptakan objek yang lebih aman dan dapat diandalkan.

Tidak dapat dikloning

Properti readonly pada PHP 8 memiliki karakteristik yang membuatnya tidak bisa diubah setelah objek dibuat. Selain itu, salah satu hal penting yang perlu dipahami adalah bahwa properti readonly juga tidak dapat di-"kloning".

Dalam konteks ini, "kloning" merujuk pada pembuatan salinan objek yang mirip dengan objek asli. Namun, karena properti readonly tidak bisa diubah setelah objek dibuat, Anda juga tidak bisa membuat salinan objek yang memiliki properti readonly dengan nilai yang berbeda.

Misalnya, jika Anda memiliki objek dengan properti readonly seperti ini:

class Product {
    public readonly string $name;
}

Anda tidak dapat dengan mudah membuat salinan objek ini dengan mengubah nilai properti name dalam salinan baru, seperti ini:

$originalProduct = new Product();
$originalProduct->name = 'Original Name';

$clonedProduct = clone $originalProduct;
$clonedProduct->name = 'New Name'; // Ini tidak diperbolehkan

Larangan ini ada untuk memastikan bahwa objek dengan properti readonly tetap konsisten dan tidak dapat diubah setelah objek dibuat. Meskipun "kloning" biasanya berguna dalam membuat salinan objek untuk manipulasi berbeda, properti readonly dirancang untuk tidak mendukung perubahan data setelah pembuatan objek.

Dengan memahami bahwa properti readonly tidak dapat dikloning, Anda dapat menghindari kesalahpahaman dan memastikan bahwa objek Anda tetap dalam kondisi yang konsisten dan aman sesuai dengan sifat properti readonly.

Kesimpulan

Dengan fitur properti readonly pada PHP 8, Anda memiliki alat yang kuat untuk membangun objek yang lebih aman dan andal.

Dengan mencegah perubahan tidak diinginkan setelah objek dibuat, fitur ini memastikan integritas data dan membantu Anda menghindari kesalahan yang dapat merugikan.

Jika Anda ingin menjaga keamanan dan keandalan kode Anda, properti readonly adalah pilihan yang sangat baik dalam pengembangan aplikasi menggunakan PHP 8.