การแจกแจงค่า (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"); // nullEnum ในคำใบ้ชนิดข้อมูล
ใช้ 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 unhandledEnum ใช้อินเทอร์เฟซ
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- นิพจน์ Match และอาร์กิวเมนต์ที่ระบุชื่อ
- ตัวดำเนินการ Nullsafe และชนิด Union
- การแจกแจงค่า (Enums)
- Fibers: การทำงานพร้อมกันแบบร่วมมือกัน