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

PHP枚举类常量如何通过变量调用?现有写法报错求解决方案

解决PHP通过变量调用类常量的问题

嘿,这个场景我太熟悉了!咱们来一步步搞定这个问题~

首先,你尝试的DaysOfWeek::{$day}写法其实在PHP 5.4及以上版本是有效的,但如果报错,大概率是这几个原因:要么PHP版本太低,要么$day的值有拼写错误(类常量可是大小写敏感的哦),或者还有更稳妥的替代方法。

下面给你几种可靠的解决方案:

1. 兼容所有PHP版本的constant()函数

这是最通用的方法,不管你用的是哪个PHP版本,都能稳定工作。它接受一个包含完整常量名的字符串参数,直接返回对应的值:

abstract class DaysOfWeek { 
    const Sunday = 0; 
    const Monday = 1; 
    // 其他星期常量...
}

$day = 'Sunday';
// 拼接类名和常量名,传入constant()
$today = constant("DaysOfWeek::$day");
echo $today; // 输出 0

2. 确认PHP版本后使用动态访问语法

如果你的PHP版本在5.4及以上,DaysOfWeek::{$day}本身是合法的,这时候你需要检查两个点:

  • $day的值是不是严格等于'Sunday'(大小写完全一致,常量名的大小写不能错)
  • 有没有其他语法错误,比如变量名拼写失误

示例代码:

$day = 'Sunday';
// 确保PHP版本≥5.4
$today = DaysOfWeek::{$day};
echo $today; // 输出 0

3. PHP 8.1+推荐使用原生枚举

如果你用的是PHP 8.1或更高版本,完全可以抛弃抽象类定义常量的方式,改用PHP原生的枚举类型,不仅语法更规范,还自带很多实用方法:

// 带数值映射的枚举
enum DaysOfWeek: int {
    case Sunday = 0;
    case Monday = 1;
    // 其他星期枚举值...
}

$day = 'Sunday';
// 使用from()方法通过字符串获取枚举实例
$todayEnum = DaysOfWeek::from($day);
// 获取对应的数值
$today = $todayEnum->value;
echo $today; // 输出 0

原生枚举还会自动处理非法值的情况,如果$day是不存在的枚举名,会直接抛出ValueError,帮你提前发现错误。

最后再提醒一句:一定要注意常量名的大小写,比如如果$day是'sunday'(全小写),那不管哪种方法都会报错,因为你定义的常量是Sunday(首字母大写)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:46:52