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
相关产品推荐
相关产品推荐

