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

PHP枚举是否像常量表达式一样使用共享内存?

PHP枚举的内存存储机制解析

核心结论

PHP的枚举与类常量遵循完全相同的内存存储机制:会被存储在共享内存中,不会为每个脚本实例重复分配内存。

具体说明

  1. 编译时求值与共享内存存储
    枚举属于PHP官方定义的「常量表达式」范畴,会在编译阶段完成求值与初始化。当OPcache(生产环境标配的PHP性能扩展)开启时,枚举的实例、成员及关联数据会被存入OPcache的共享内存区域,所有同进程池内的脚本实例都会直接复用这部分共享数据。

  2. 对比类常量的内存行为
    以你给出的类常量数组为例:

    class MyClass{
        const MY_ARRAY = [
            1 => 'One',
            2 => 'Two',
            3 => 'Three',
        ];
    }
    

    该常量数组仅在编译阶段分配一次内存并存入共享区域,1000个脚本实例运行时不会产生1000倍的内存开销;枚举的内存行为完全一致,比如定义一个枚举:

    enum Number: int {
        case One = 1;
        case Two = 2;
        case Three = 3;
    }
    

    这个枚举的所有数据同样只会在共享内存中存储一份,多实例运行时无额外内存开销。

  3. 验证方式

    • 可通过opcache_get_status()函数查看OPcache共享内存中的常量与枚举存储详情,确认其仅存在一份实例;
    • 使用内存分析工具(如ps、memory_get_usage())观察多实例运行时的内存变化,不会出现与实例数线性相关的内存增长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:52:34