Aym*_*Dev 7 generics doctrine static-analysis phpdoc phpstan
我在一个Symfony项目上运行PHPStan,其中我在Doctrine实体中有以下关系:
/**
* @ORM\OneToMany(targetEntity="App\Entity\Course\Slide", mappedBy="chapter", cascade={"persist"}, orphanRemoval=true)
* @ORM\OrderBy({"listOrder" = "ASC"})
*
* @var ArrayCollection<Slide>
*/
private $slides;
Run Code Online (Sandbox Code Playgroud)
使用规则级别 6运行分析我收到以下有关该属性(及其 getter 返回类型)的消息:
App\Entity\Course\Chapter::$slides具有泛型类的属性Doctrine\Common\Collections\ArrayCollection未指定其类型:TKey, T
您可以通过checkGenericClassInNonGenericObjectType: false在您的phpstan.neon.
我的编辑尝试只会混淆 PHPStan,可能是因为我没有完全理解这里的泛型。但是仅仅因为我不明白而将消息静音将是愚蠢的。
我应该在 PHPDoc 中添加或更改什么?
Ond*_*tes 18
ArrayCollection有两个类型变量:TKey 和 T。所以ArrayCollection<Slide>还不够,你需要像ArrayCollection<int, Slide>.
它是
\n/**\n * @var ArrayCollection<int, Slide>\n */\nRun Code Online (Sandbox Code Playgroud)\ndump()对父实体执行操作显示它$slides是一个 0 索引数组:
0 => App\\Entity\\Slide\n1 => App\\Entity\\Slide\nRun Code Online (Sandbox Code Playgroud)\n所以它是一个int,但不是实体的 ID(因为它尚未持久化)。
这是 Ond\xc5\x99ej Mirtes(=PhpStan 的作者)撰写的关于泛型的深入文章:https://medium.com/@ondrejmirtes/generics-in-php-using-phpdocs-14e7301953
\n