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

PHP中WeakMap存储枚举值:枚举实例何时会被垃圾回收?

PHP枚举实例在WeakMap中的垃圾回收时机

结论:存于WeakMap中的枚举实例条目永远不会变得不可见/不可访问,因为枚举实例永远不会被垃圾回收。

原因如下:

  • PHP的枚举case实例是全局单例,从程序启动到终止,PHP引擎会始终持有这些实例的强引用,不会将其标记为可回收的垃圾。
  • WeakMap的核心特性是:当作为键的对象没有任何强引用存在时,该对象会被垃圾回收,对应的WeakMap条目也会被自动移除。但枚举实例的强引用由PHP引擎本身维护,永远不会被释放,所以完全不满足WeakMap键被回收的条件。

可以通过以下代码验证这一点:

enum MyEnum {
    case A;
}

$wm = new WeakMap();
$wm[MyEnum::A] = 'something';

// 手动触发垃圾回收
gc_collect_cycles();

// 检查WeakMap中对应条目是否存在
var_dump(isset($wm[MyEnum::A])); // 输出结果为 bool(true)

无论执行多少次垃圾回收操作,$wm[MyEnum::A]的条目都会持续存在,因为枚举实例的强引用始终存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:30:55