2024 年 PHP 日本研討會

列舉

(PHP 8 >= 8.1.0)

基本列舉

列舉是在類別和類別常數之上的限制層,旨在提供一種方法來定義類型的封閉可能值集合。

<?php
enum Suit
{
case
Hearts;
case
Diamonds;
case
Clubs;
case
Spades;
}

function
do_stuff(Suit $s)
{
// ...
}

do_stuff(Suit::Spades);
?>

完整的說明,請參閱「列舉 (Enumerations)」章節。

轉型 (Casting)

如果將一個 列舉 轉換為 物件,它不會被修改。如果將一個 列舉 轉換為 陣列,則會建立一個具有單個 name 鍵的陣列(純列舉)或一個同時具有 namevalue 鍵的陣列(支援列舉)。所有其他轉型類型都會導致錯誤。

新增註釋

使用者貢獻的註釋 1 則註釋

esdras-schonevald
2 年前
https://gist.github.com/esdras-schonevald/71a6730e6191c5e9c053e2f65b839eec

<?php

declare(strict_types=1);

/**
* 這是一個範例
* 如何使用 Enum 建立自訂例外狀況
* PHP 8.1 以上版本
*/

enum MyExceptionCase {
case
InvalidMethod;
case
InvalidProperty;
case
Timeout;
}

class
MyException extends Exception {
function
__construct(private MyExceptionCase $case){
match(
$case){
MyExceptionCase::InvalidMethod => parent::__construct("錯誤的請求 - 方法無效", 400),
MyExceptionCase::InvalidProperty => parent::__construct("錯誤的請求 - 屬性無效", 400),
MyExceptionCase::Timeout => parent::__construct("錯誤的請求 - 超時", 400)
};
}
}

// 測試我的自訂例外類別
try {
throw new
MyException(MyExceptionCase::InvalidMethod);
} catch (
MyException $myE) {
echo
$myE->getMessage(); // 錯誤的請求 - 方法無效
}
To Top