全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

php中::能用于枚举类吗_php8枚举静态成员访问规则【操作】

支持,但仅限于显式声明为 static 的属性或方法;枚举 case 是类型实例,通过 EnumName::CASE_NAME 访问属常量式命名访问,非静态调用,不可加括号或直接访问未定义属性。

PHP 8 中枚举类支持 :: 访问静态成员吗?

支持,但仅限于 static 声明的属性或方法,不支持直接用 :: 访问枚举案例(case)本身——枚举 case 是常量,不是静态成员,不能用 :: 调用。

如何正确访问枚举的 case 和静态成员?

枚举的每个 case 是该枚举类型的实例,必须通过 self::CASE_NAME(在内部)或 EnumName::CASE_NAME(在外部)引用,这不是「静态调用」,而是「常量式命名访问」;而真正需要 :: 的是显式声明的 static 成员:

  • Color::RED ✅ 合法:访问枚举 case(语法糖,非静态调用)
  • Color::$nameMap ❌ 错误:未声明为 static 就不能用 $ + ::
  • Color::getNameMap() ✅ 合法:若该方法声明为 public static
  • Color::NONEXISTENT_CASE ❌ 致命错误:Fatal error: Uncaught Error: Undefined class constant

常见错误:把 case 当成 static 方法调用

例如写 Color::RED()Color::RED->value(没定义 value 属性时),会报错。PHP 枚举 case 不是函数,不能加括号;且只有启用了标量枚举(enum Color: string)并显式赋值后,才存在 ->value->name 属性。

enum Status: string
{
    case Active = 'active';
    case Inactive = 'inactive';

    public static function all(): array
    {
        return [self::Active, self::Inactive];
    }
}

// 正确
$status = Status::Active; // 类型是 Status 实例
echo $status->value; // 'active'

// 错误示例(运行时报错)
// Status::Active()      // Fatal error: Uncaught Error: Call to undefined method
// Status::Active->foo   // Notice: Trying to get property 'foo' of non-object(如果没定义 foo)

静态属性和方法必须显式声明 static

枚举中不能隐式拥有静态成员。所有需通过 :: 访问的变量或函数,都必须带 static 关键字,否则即使名字看起来像「静态」,也无法用作用域解析操作符调用。

  • 未声明 static 的属性(如 public string $label)只能在实例上访问($instance->label
  • private static array $cache = []; 才能写 Status::getCache()Status::$cache
  • PHP 8.2+ 支持只读静态属性(public static readonly array $mapping),但仍需 static 修饰才能用 ::
枚举的 case 名称看似像常量,实则是编译期生成的类型实例;真正走 :: 路径的,永远只认明确定义的 static 成员——这点和普通类一致,但初学者容易被 Status::Active 的写法误导。


# php  # php8  # app  # 作用域  # red  # Static  # String  # Array  # 常量  # Error  # 枚举类型  # enum  # class  # public  # private  # undefined  # 的是  # 就不  # 这不是  # 不支持  # 不能用  # 报错  # 仍需  # 如何正确  # 在内部  # 只认 


相关文章: 学校免费自助建站系统:智能生成+拖拽设计+多端适配  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  如何用PHP快速搭建CMS系统?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  常州企业网站制作公司,全国继续教育网怎么登录?  制作门户网站的参考文献在哪,小说网站怎么建立?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何零基础开发自助建站系统?完整教程解析  如何通过主机屋免费建站教程十分钟搭建网站?  浅析上传头像示例及其注意事项  如何选择适合PHP云建站的开源框架?  制作表格网站有哪些,线上表格怎么弄?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何生成腾讯云建站专用兑换码?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  郑州企业网站制作公司,郑州招聘网站有哪些?  如何在云虚拟主机上快速搭建个人网站?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  建站为何优先选择香港服务器?  如何快速搭建二级域名独立网站?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何在宝塔面板中创建新站点?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何高效利用200m空间完成建站?  ,怎么在广州志愿者网站注册?  如何在阿里云完成域名注册与建站?  再谈Python中的字符串与字符编码(推荐)  如何用低价快速搭建高质量网站?  如何快速生成高效建站系统源代码?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  宝塔新建站点为何无法访问?如何排查?  如何在建站之星网店版论坛获取技术支持?  TestNG的testng.xml配置文件怎么写  微信小程序 五星评分(包括半颗星评分)实例代码  定制建站价位费用解析与套餐推荐全攻略  javascript中对象的定义、使用以及对象和原型链操作小结  金*站制作公司有哪些,金华教育集团官网?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  ,怎么用自己头像做动态表情包?  制作旅游网站html,怎样注册旅游网站?  电商平台网站制作流程,电商网站如何制作?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  高端云建站费用究竟需要多少预算?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  三星网站视频制作教程下载,三星w23网页如何全屏? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。