0Pricing
PHP Academy · บทเรียน

การแจกแจงค่า (Enums)

กำหนดชุดค่าที่ปลอดภัยด้านชนิดข้อมูลด้วย backed และ pure enums ของ PHP 8.1

การแจกแจงค่า (Enums) เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

Enum คืออะไร

PHP 8.1 เปิดตัว enum ซึ่งเป็นชนิดข้อมูลพิเศษที่จำกัดตัวแปรให้อยู่ในชุดค่าที่มีชื่อและกำหนดไว้ล่วงหน้า ทำให้โค้ดสื่อความหมายได้ดีขึ้นและปลอดภัยด้านชนิดข้อมูล

Enum แบบบริสุทธิ์ (Unit Enum)

Enum แบบบริสุทธิ์มีกรณีที่มีชื่อ แต่ไม่มีค่าที่เชื่อมโยง เหมาะสำหรับสถานะ ทิศทาง หรือสถานะการทำงาน

<?php
enum Status {
    case Active;
    case Inactive;
    case Banned;
}

$s = Status::Active;
echo $s->name; // "Active"

Backed Enum

Backed enum กำหนดค่าแบบสเกลาร์ (int หรือ string) ให้แต่ละกรณี เหมาะสำหรับการจัดเก็บในฐานข้อมูลหรือการตอบกลับ API

<?php
enum Color: string {
    case Red   = "red";
    case Green = "green";
    case Blue  = "blue";
}

echo Color::Red->value; // "red"

From และ TryFrom

แปลงค่าดิบกลับเป็นกรณีของ enum ด้วย from() (ส่งข้อยกเว้นเมื่อค่าไม่ถูกต้อง) หรือ tryFrom() (ส่งคืน null เมื่อค่าไม่ถูกต้อง)

<?php
$color = Color::from("red");      // Color::Red
$maybe = Color::tryFrom("purple"); // null

Enum ในคำใบ้ชนิดข้อมูล

ใช้ enum เป็นคำใบ้ชนิดข้อมูลสำหรับพารามิเตอร์และชนิดค่าที่ส่งคืน PHP จะบังคับให้ส่งผ่านได้เฉพาะกรณีที่ถูกต้องเท่านั้น

<?php
function paint(Color $color): void {
    echo "Painting with ".$color->value;
}
paint(Color::Blue); // "Painting with blue"

กรณีของ Enum ใน match

Enum ทำงานร่วมกับนิพจน์ match ได้อย่างเหมาะสมสำหรับการจัดการทุกกรณีอย่างครบถ้วน

<?php
$label = match($status) {
    Status::Active   => "Active user",
    Status::Inactive => "Inactive account",
    Status::Banned   => "Banned",
};
// PHP can warn if cases are unhandled

Enum ใช้อินเทอร์เฟซ

Enum สามารถใช้อินเทอร์เฟซได้ ทำให้รองรับพฤติกรรมแบบพหุรูป

<?php
interface HasLabel {
    public function label(): string;
}

enum Status: string implements HasLabel {
    case Active   = "active";
    case Inactive = "inactive";
    public function label(): string {
        return ucfirst($this->value);
    }
}

เมธอดของ Enum

Enum มีเมธอดได้ (แต่ไม่มีตัวสร้างหรือคุณสมบัติที่เปลี่ยนแปลงค่าได้)

<?php
enum Suit: string {
    case Hearts   = "H";
    case Diamonds = "D";
    case Clubs    = "C";
    case Spades   = "S";

    public function color(): string {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => "red",
            Suit::Clubs,  Suit::Spades  => "black",
        };
    }
}

ค่าคงที่ของ Enum

Enum มีค่าคงที่ได้ (ไม่ใช่กรณี) สำหรับค่าแบบสเกลาร์ที่เกี่ยวข้อง

<?php
enum Direction {
    case North;
    case South;
    const DEFAULT = self::North;
}

การแสดงรายการกรณี

EnumName::cases() ส่งคืนอาร์เรย์ของอ็อบเจ็กต์กรณี enum ทั้งหมด ซึ่งมีประโยชน์สำหรับสร้างตัวเลือกแบบดรอปดาวน์

<?php
$options = Color::cases();
foreach ($options as $c) {
    echo $c->name.": ".$c->value."\n";
}

Enum กับค่าคงที่ของคลาส

Enum บังคับใช้ความปลอดภัยด้านชนิดข้อมูล คุณไม่สามารถส่งจำนวนเต็ม 1 โดยไม่ตั้งใจในตำแหน่งที่ต้องการ enum Status ได้ ค่าคงที่ของคลาสไม่มีการรับประกันเช่นนี้

สรุป

Enum ใช้แสดงชุดค่าที่ตายตัวพร้อมความปลอดภัยด้านชนิดข้อมูล ใช้ enum แบบบริสุทธิ์สำหรับสถานะ และใช้ backed enum เมื่อต้องการค่าในฐานข้อมูลหรือ API ใช้ tryFrom() เพื่อแยกวิเคราะห์อย่างปลอดภัย

ตรวจสอบความเข้าใจอย่างรวดเร็ว

Color::tryFrom("invalid") จะส่งคืนอะไร หากไม่มีกรณีใดตรงกัน

คำถามที่พบบ่อย

บทเรียน “การแจกแจงค่า (Enums)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแจกแจงค่า (Enums)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแจกแจงค่า (Enums)”

กำหนดชุดค่าที่ปลอดภัยด้านชนิดข้อมูลด้วย backed และ pure enums ของ PHP 8.1 คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การแจกแจงค่า (Enums)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. นิพจน์ Match และอาร์กิวเมนต์ที่ระบุชื่อ
  2. ตัวดำเนินการ Nullsafe และชนิด Union
  3. การแจกแจงค่า (Enums)
  4. Fibers: การทำงานพร้อมกันแบบร่วมมือกัน
← กลับไปที่ PHP Academy