PHP 8 重复属性时出错:是否可以多次使用属性?
PHP 8 Error to repeated an Attribute: is it possible to use attribute multiple time?
我有一个属性如下:
#[Attribute]
class State{
public function __constractor(
public string $name
){}
}
我想将多个状态添加到我的 class 中,如下所示:
#[
State('a'),
State('b')
]
class StateMachine{}
一切正常,我可以按如下方式访问属性列表:
$attrs = $classReflection->getAttributes(State::class);
但问题是,每当我尝试即时其中一个时,都会抛出一个错误:
$instance = $attrs[0]->newInstance();
错误是:
Error: Attribute "State" must not be repeated
有什么想法吗?
根据官方文档,您必须以不同的方式定义您的属性才能这样做。我使用 PHPStorm 来验证我的假设,这应该有效:
定义属性
use Attribute;
#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_CLASS)]
class State{
public function __construct(
public string $name
){}
}
这里的重要部分是 Attribute::IS_REPEATABLE
定义。要使其适用于 类,您还需要使用 Attribute::TARGET_CLASS
.
根据docs,在应用属性时,您还应该将所有内容放在一行中:
#[State('a'), State('b')]
class StateMachine{}
我有一个属性如下:
#[Attribute]
class State{
public function __constractor(
public string $name
){}
}
我想将多个状态添加到我的 class 中,如下所示:
#[
State('a'),
State('b')
]
class StateMachine{}
一切正常,我可以按如下方式访问属性列表:
$attrs = $classReflection->getAttributes(State::class);
但问题是,每当我尝试即时其中一个时,都会抛出一个错误:
$instance = $attrs[0]->newInstance();
错误是:
Error: Attribute "State" must not be repeated
有什么想法吗?
根据官方文档,您必须以不同的方式定义您的属性才能这样做。我使用 PHPStorm 来验证我的假设,这应该有效:
定义属性
use Attribute;
#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_CLASS)]
class State{
public function __construct(
public string $name
){}
}
这里的重要部分是 Attribute::IS_REPEATABLE
定义。要使其适用于 类,您还需要使用 Attribute::TARGET_CLASS
.
根据docs,在应用属性时,您还应该将所有内容放在一行中:
#[State('a'), State('b')]
class StateMachine{}