Menu
CoddyTech

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:

Active

Enum 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:

active

Enum 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.

challenge icon

Tantangan

Mudah

Mari 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 bernama OrderStatus dengan empat kasus:
    • Pending berbasis 'pending'
    • Processing berbasis 'processing'
    • Shipped berbasis 'shipped'
    • Delivered berbasis 'delivered'
    Tambahkan method 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 class Order yang menggunakan enum tersebut. Sertakan file OrderStatus. Class ini harus:
    • Menerima ID pesanan (string) dan OrderStatus di 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
  • main.php: Sertakan file Order. Kamu akan menerima dua input: ID pesanan dan string status (seperti "shipped"). Gunakan tryFrom() untuk mengonversi input string dengan aman menjadi enum OrderStatus. Jika statusnya valid, buat Order dan cetak dua baris:
    • Hasil dari getInfo()
    • Hasil dari getStatusValue()
    Jika string status tidak valid, cetak "Invalid status".

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"

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