在 PHP 8 中,引入了 ReflectionAttribute 类。它类似于 Java、Typescripts 等中的注解。例如,每次您想使用属性的属性时,您必须执行以下操作:
$attributeReflection = ...;
...
$attribute = $attributeReflection->newInstance();
$message = $attribute->getMessage();
$attributeReflection 是 ReflectionAttribute 的一个实例。属性本身如下:
#[Attribute(Attribute::ALL)]
class MyAttribute{
public function __construct(
public ?string $message = ''
){}
}
并按如下方式用于属性
class Foo{
#[MyAttribute("my message")
public ?string $id = null;
}
如您所见,每次我想获取属性的消息时,我都必须创建它的一个新实例。虽然对于这种情况,消息永远不会改变。
我正在寻找一种避免新实例并使用共享实例的方法。
可能吗?