You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP:如何从静态枚举方法获取匹配值?解决Undefined constant错误

问题描述

我希望从PHP枚举(Enum)的静态方法中获取字符串值,编写了如下代码:

<?php

enum Mensagem {
    
    case SUCESSO;
    case ATENCAO;
    case ERRO;
    
    public static function getCor(): string
    {
        return match(self)
        {
            self::SUCESSO => '#7FFFD4',   
            self::ATENCAO => '#FFFF00',   
            self::ERRO => '#DC143C'   
        };
    }
}

$mensagem = Mensagem::SUCESSO::getCor();

echo "<div style='background-color:{$mensagem}'> Sucesso ! </div>";

运行时出现错误:

Uncaught Error: Undefined constant "self"

尝试使用match(true)也无效,请问如何从静态枚举方法中获取匹配值?

解决方案

问题核心是静态方法属于枚举类本身,无法直接用self指代具体的枚举实例,要实现需求有两种可行方案:

方案一:改用实例方法(推荐)

把getCor改为实例方法(去掉static关键字),方法内用$this指代当前枚举实例,就能正常匹配:

<?php

enum Mensagem {
    
    case SUCESSO;
    case ATENCAO;
    case ERRO;
    
    public function getCor(): string
    {
        return match($this)
        {
            self::SUCESSO => '#7FFFD4',   
            self::ATENCAO => '#FFFF00',   
            self::ERRO => '#DC143C'   
        };
    }
}

$mensagem = Mensagem::SUCESSO->getCor();

echo "<div style='background-color:{$mensagem}'> Sucesso ! </div>";

方案二:保留静态方法,传入实例参数

如果必须用静态方法,需要在调用时把枚举实例作为参数传入方法:

<?php

enum Mensagem {
    
    case SUCESSO;
    case ATENCAO;
    case ERRO;
    
    public static function getCor(self $instance): string
    {
        return match($instance)
        {
            self::SUCESSO => '#7FFFD4',   
            self::ATENCAO => '#FFFF00',   
            self::ERRO => '#DC143C'   
        };
    }
}

$mensagem = Mensagem::getCor(Mensagem::SUCESSO);

echo "<div style='background-color:{$mensagem}'> Sucesso ! </div>";

内容的提问来源于stack exchange,提问作者celsowm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:20:16