PHP 8重复属性时出错:是否可以多次使用属性



我有一个属性如下:

#[Attribute]
class State{
public function __constractor(
public string $name
){}
}

我想将多个状态添加到我的类中,如下所示:

#[
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

根据文档,在应用属性时,您还应该将所有内容放在一行中:

#[State('a'), State('b')]
class StateMachine{}

相关内容

  • 没有找到相关文章

最新更新