⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

枚举类型高级用法:联合方法与状态机实现

利用PHP 8.1枚举支持方法和接口,设计有限状态机模型,替代冗长的if-else判断,提升代码可读性与扩展性。 · 难度:入门 · +10XP

枚举类型高级用法:联合方法与状态机实现

PHP枚举不仅仅是常量集合,它们可以拥有方法、实现接口甚至拥有抽象方法。本教程将设计一个支付订单状态机:Pending -> Paid -> Shipped -> Delivered。每个枚举case覆盖抽象方法canTransitionTo(),定义允许的状态转换。此外展示如何在枚举中存储与数据库映射关系,以及利用枚举作为策略模式的选择器,消除switch语句。

enum OrderStatus: string {
    case Pending = 'pending';
    case Paid = 'paid';
    
    public function canTransitionTo(self $target): bool {
        return match($this) {
            self::Pending => $target === self::Paid,
            self::Paid => $target === self::Shipped,
            default => false,
        };
    }
    public function label(): string {
        return match($this) {
            self::Pending => '待支付',
            self::Paid => '已付款',
        };
    }
}
$status = OrderStatus::Pending;
if ($status->canTransitionTo(OrderStatus::Paid)) {
    echo '允许转换';
}
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 90 篇
0 完成
🔥 0