Mos*_*afa 4 php annotations php-8
我有一个属性如下:
#[Attribute]
class State{
public function __constractor(
public string $name
){}
}
Run Code Online (Sandbox Code Playgroud)
我想将多个状态添加到我的类中,如下所示:
#[
State('a'),
State('b')
]
class StateMachine{}
Run Code Online (Sandbox Code Playgroud)
一切都很好,我可以访问属性列表,如下所示:
$attrs = $classReflection->getAttributes(State::class);
Run Code Online (Sandbox Code Playgroud)
但问题是,每当我尝试即时其中一个时,都会引发错误:
$instance = $attrs[0]->newInstance();
Run Code Online (Sandbox Code Playgroud)
错误是:
Error: Attribute "State" must not be repeated
Run Code Online (Sandbox Code Playgroud)
任何想法?
根据官方文档,您必须以不同的方式定义属性才能做到这一点。我使用 PHPStorm 来验证我的假设,这应该可行:
定义属性
use Attribute;
#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_CLASS)]
class State{
public function __construct(
public string $name
){}
}
Run Code Online (Sandbox Code Playgroud)
这里重要的部分是Attribute::IS_REPEATABLE定义。为了使其适用于类,您还需要使用Attribute::TARGET_CLASS.
根据文档,在应用属性时,您还应该将所有内容放在一行中:
use Attribute;
#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_CLASS)]
class State{
public function __construct(
public string $name
){}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1953 次 |
| 最近记录: |