php – match 與 enum 用法

Match 用法

先了解 match (8.0 支援) 的應用,後面可以搭配 enum。match 與 switch 用法類似,用於多個項目比較

$food = "cake";

$description = match ($food) {
    "cake" => "蛋糕一份",
    "cafe" => "咖啡一杯",
};

echo $description; // 蛋糕一份

進階一點的可以是

$price = function (int $hour){
    // 設定 true 讓左側的 單一條件表達式 可以使用變數做邏輯判斷
    return match (true) {
        (11 <= $hour and $hour <= 13) => "399",
        (14 <= $hour and $hour <= 17) => "299",
        (18 <= $hour and $hour <= 20) => "499",
        default => "不販售"
    };
};

echo $price(7); // 不販售
echo $price(12); // 399
echo $price(15); // 299
echo $price(19); // 499

Enum

Enum (8.1 支援) ,可以配合 match 做到這樣的轉換

enum Project: string
{
    case ID = "001";
    case CODE = "HappyNewYear";
    
    // 可以做你想要的轉換
    public function desc(): string
    {
        return match ($this) {
            self::ID => "編號",
            self::CODE => "happy-new-year"
        };
    }
}

echo Project::ID->name; // ID
echo Project::CODE->value; // HappyNewYear
echo Project::CODE->desc(); // happy-new-year

發表迴響