php - 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{}
推荐阅读
- sql - SQL - 使用另一个表过滤
- swiftui - 如何处理深度嵌套的导航链接
- python - 在点之间填充数据 Matplotlib
- postgresql - 是什么导致使用 asp net core 回滚 postgres 中的更改?
- discord.js - 我无法在另一个文本频道中编辑消息
- python - Plotly:如何更改图例项目名称?
- javascript - 在 for 循环中重新声明 let 和 const
- angular - 如何在 datalables donut highchart 中显示数字
- rust - 在单个项目中使用 main.rs 和 lib.rs,不能在没有 lib 文件夹的库中导入模块
- python - 在返回空白结果的 Pandas 数据框中进行迭代,不确定为什么?