Enum (PHP 8.1)
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 59 dari 91.
Sebelum PHP 8.1, merepresentasikan kumpulan nilai tetap seperti status atau tipe berarti menggunakan konstanta class atau string ajaib, keduanya merupakan pendekatan yang rentan terhadap error. Enum (enumerasi) menyediakan cara yang tepat untuk mendefinisikan tipe yang hanya dapat menyimpan nilai tertentu yang telah ditentukan sebelumnya.
Definisikan enum menggunakan kata kunci enum:
<?php
enum Status {
case Pending;
case Active;
case Completed;
}
$status = Status::Active;
echo $status->name;
Output:
ActiveEnum juga dapat memiliki nilai pendukung, yaitu nilai string atau integer yang terkait dengan setiap kasus. Ini berguna saat menyimpan enum di database atau API:
<?php
enum Status: string {
case Pending = 'pending';
case Active = 'active';
case Completed = 'completed';
}
$status = Status::Active;
echo $status->value;
Output:
activeEnum backed menyediakan method from() untuk membuat enum dari nilainya, dan tryFrom() yang mengembalikan null alih-alih melemparkan error untuk nilai yang tidak valid:
<?php
$status = Status::from('active'); // Mengembalikan Status::Active
$invalid = Status::tryFrom('unknown'); // Mengembalikan null
Enum juga dapat berisi method, sehingga efektif untuk mengenkapsulasi logika terkait. Enum bekerja dengan lancar bersama petunjuk tipe, memastikan fungsi hanya menerima nilai yang valid, jadi kamu tidak perlu lagi memeriksa apakah string cocok dengan opsi yang diharapkan.
Tantangan
MudahMari kita buat sistem pengelolaan pesanan yang menggunakan enum untuk merepresentasikan status pesanan dengan keamanan tipe. Daripada mengandalkan string yang bisa salah ketik atau tidak valid, kamu akan membuat enum berbasis yang memetakan setiap status ke nilai yang sesuai untuk database.
Kamu akan mengatur kodemu dalam tiga file:
OrderStatus.php: Buat enum berbasis string bernamaOrderStatusdengan empat kasus:Pendingberbasis'pending'Processingberbasis'processing'Shippedberbasis'shipped'Deliveredberbasis'delivered'
label()yang mengembalikan deskripsi yang mudah dipahami untuk setiap status:- Pending mengembalikan
"Awaiting confirmation" - Processing mengembalikan
"Being prepared" - Shipped mengembalikan
"On the way" - Delivered mengembalikan
"Order complete"
Order.php: Buat classOrderyang menggunakan enum tersebut. Sertakan file OrderStatus. Class ini harus:- Menerima ID pesanan (string) dan
OrderStatusdi konstruktor menggunakan promosi konstruktor - Memiliki method
getInfo()yang mengembalikan"Order [id]: [status label]" - Memiliki method
getStatusValue()yang mengembalikan nilai dasar status, yang berguna untuk penyimpanan di database
- Menerima ID pesanan (string) dan
main.php: Sertakan file Order. Kamu akan menerima dua input: ID pesanan dan string status (seperti"shipped"). GunakantryFrom()untuk mengonversi input string dengan aman menjadi enumOrderStatus. Jika statusnya valid, buatOrderdan cetak dua baris:- Hasil dari
getInfo() - Hasil dari
getStatusValue()
"Invalid status".- Hasil dari
Tantangan ini menunjukkan cara enum memberikan keamanan tipe. Class Order hanya dapat menerima status yang valid, dan method tryFrom() memungkinkan kamu menangani input pengguna dengan aman tanpa risiko nilai yang tidak valid.
Coba sendiri
<?php
require_once 'Order.php';
// Baca input
$orderId = trim(fgets(STDIN));
$statusString = trim(fgets(STDIN));
// TODO: Gunakan OrderStatus::tryFrom() untuk mengubah string status menjadi enum dengan aman
// tryFrom() mengembalikan null jika nilainya tidak valid
// TODO: Jika status valid, buat Order dan cetak:
// - Hasil getInfo()
// - Hasil getStatusValue()
// TODO: Jika status tidak valid, cetak "Invalid status"
?>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 Siswa10Konsep OOP Lanjutan
Komposisi vs PewarisanInjeksi Dependensiclass AnonimEnum (PHP 8.1)Fiber (PHP 8.1)Pendalaman Kloning objectGenerator dan Iterator2Namespace 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