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
一直存在。
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
一直存在。
在 PHP 中,枚举只是一个(特殊的)类,其中包含多个常量,这很容易验证:
enum MyEnum { case A; }
// enum(MyEnum::A)
// string(6) "object"
var_dump(
(new ReflectionClass(MyEnum::class))->getConstant('A'),
gettype(MyEnum::A));
由于没有人可以取消常量或更改其值,因此枚举对象至少有一个引用,WeakMap中的条目将保留,直到有人手动取消它。