Php的“new” WeakMap - 枚举类型是否会被垃圾回收?

3

https://www.php.net/manual/zh/class.weakmap.php

枚举类型怎么办?

您可以这样做

enum MyEnum{
case A;
}

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

什么时候$wm[MyEnum::A]会变得不可见或者无法访问?如果有的话?

我不是在谈论$wm。假设$wm一直存在。

1个回答

4

在 PHP 中,枚举只是一个(特殊的)类,其中包含多个常量,这很容易验证:

enum MyEnum { case A; }

// enum(MyEnum::A)
// string(6) "object"
var_dump(  
    (new ReflectionClass(MyEnum::class))->getConstant('A'),
    gettype(MyEnum::A));

由于没有人可以取消常量或更改其值,因此枚举对象至少有一个引用,WeakMap中的条目将保留,直到有人手动取消它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接