有一段时间我不太明白,但你可以继承属性
https://3v4l.org/TrMTe
<?php
#[Attribute(Attribute::TARGET_PROPERTY)]
类 PropertyAttributes
{
公共函数 __construct(
公共只读 ?string $name = null,
公共只读 ?string $label = null,
) {}
}
#[Attribute(Attribute::TARGET_PROPERTY)]
类 IntegerPropertyAttributes 扩展 PropertyAttributes
{
公共函数 __construct(
?string $name = null,
?string $label = null,
公共只读 ?int $default = null,
公共只读 ?int $min = null,
公共只读 ?int $max = null,
公共只读 ?int $step = null,
) {
parent::__construct($name, $label);
}
}
#[Attribute(Attribute::TARGET_PROPERTY)]
类 FloatPropertyAttributes 扩展 PropertyAttributes
{
公共函数 __construct(
?string $name = null,
?string $label = null,
公共只读 ?float $default = null,
公共只读 ?float $min = null,
公共只读 ?float $max = null,
) {
parent::__construct($name, $label);
}
}
类 MyClass
{
#[IntegerPropertyAttributes('prop', 'property: ', 5, 0, 10, 1)]
公共 int $prop;
}
$refl = new ReflectionProperty('MyClass', 'prop');
$attributes = $refl->getAttributes();
遍历 ($attributes 作为 $attribute) {
var_dump($attribute->getName());
var_dump($attribute->getArguments());
var_dump($attribute->newInstance());
}
?>