Php的“新”WeakMap --Enums曾经被垃圾收集过吗?

j9per5c4  于 2023-02-18  发布在  PHP
关注(0)|答案(1)|浏览(84)

https://www.php.net/manual/en/class.weakmap.php
那Enums呢
你能做到

enum MyEnum{
case A;
}
$wm = new WeakMap();
$wm[MyEnum::A] = 'something';

何时
$wm[MyEnum::A]变得不可见?或无法访问?如果有?
我不是在说$wm,假设$wm总是存在。

xzlaal3s

xzlaal3s1#

php中的enum只是一个包含几个常量的(特殊的)类,这很容易验证:

enum MyEnum { case A; }

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

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

相关问题