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

PHP属性中使用枚举值报错,是否需提交Bug?

问题解答

这不是PHP的Bug,不需要上报,是Attribute参数的语法限制导致的。

PHP要求Attribute的参数必须是编译时常量表达式,而Types::A->value属于属性访问操作——哪怕枚举的value是只读常量,这种写法也不属于常量表达式的允许范围,因此会触发Constant expression contains invalid operations错误。

可行的解决方案

  • 直接使用枚举值的字面量:
    #[MyAttribute(mapping: ['a' => ''])]
    class Entity {}
    
  • 若想避免硬编码字面量,可借助PHP 8.1+允许直接传递枚举case作为参数值的特性调整结构,比如将映射关系的键值对调换(如果业务逻辑允许):
    #[MyAttribute(mapping: ['' => Types::A])]
    class Entity {}
    
    之后在处理Attribute时再提取value属性即可。

需要注意的是,目前PHP的常量表达式规则暂不支持在Attribute参数的数组键中使用枚举的value属性,这是语言设计的既定限制而非Bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:45:55