Doctrine集合的Docblocks

Ben*_*min 17 php doctrine phpdoc docblocks doctrine-orm

是否有标准方法在Doctrine项目的docblock注释中记录Collection内的预期实体类?就像是:

/**
 * @var Collection<User>
 */
protected $users;
Run Code Online (Sandbox Code Playgroud)

看起来PHPDoc现在是docblock注释的事实标准,但是我找不到这个用例的任何提及.

Mat*_*oli 82

这是一个解决方案,使您可以在Collection方法和对象方法上进行自动完成:

/**
 * @param Collection|User[] $users
 */
public function foo($users)
{
    $users-> // autocompletion on Collection methods works

    foreach ($users as $user) {
        $user-> // autocompletion on User methods work
    }
}
Run Code Online (Sandbox Code Playgroud)

它至少在PhpStorm中扮演着魅力.

  • 好的,我明白了你的意思.我确实不会将此类型提示用于将由其他用户使用的库.但是对于我们的团队来说,它才有效.使用PSR-5可以使用泛型表示法,因此更合适:`Collection <User>`.但是我不确定PhpStorm是否容易处理它. (7认同)
  • 一个正确的绅士和一个学者这一个. (3认同)
  • 虽然这在 PhpStorm 中有效,但我认为这是一个无效的类型提示,因为它说您可以传入一个 User 对象数组,在这种情况下,超出魔术迭代的任何集合方法都将无效。 (2认同)

Ben*_*min 6

2022 年更新

CollectionDoctrine 现在用语法记录了通用类型@template,现在至少由 PhpStorm 和静态分析工具(Psalm 和 PHPStan)支持:

/**
 * @var Collection<int, User>
 */
protected Collection $users;
Run Code Online (Sandbox Code Playgroud)

不再需要旧的 PhpStorm hacky记录方式。Collection|User[]