Php 条令集合的docblock

Php 条令集合的docblock,php,doctrine,doctrine-orm,phpdoc,docblocks,Php,Doctrine,Doctrine Orm,Phpdoc,Docblocks,在条令项目的docblock注释中,是否有标准方法记录集合中预期的实体类别?比如: /** * @var Collection<User> */ protected $users; /** *@var集合 */ 受保护的用户; 现在看来PHPDoc是docblock注释的事实上的标准,但是我找不到关于这个用例的任何提及。我认为User[]应该可以工作。不记得我在哪里找到的。有几种不同的方法记录预期变量。有关可用标记的完整列表,请查看 class MyClass { /

在条令项目的docblock注释中,是否有标准方法记录集合中预期的实体类别?比如:

/**
 * @var Collection<User>
 */
protected $users;
/**
*@var集合
*/
受保护的用户;

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

我认为
User[]
应该可以工作。不记得我在哪里找到的。

有几种不同的方法记录预期变量。有关可用标记的完整列表,请查看

class MyClass
{
    /**
     * Users collection
     * @var \Doctrine\ORM\ArrayCollection
     */
    protected $users;

    /**
     * My method that doesn't do much
     * @param \Doctrine\ORM\ArrayCollection $users
     * @return void
     */
    public function myMethod(\Doctrine\ORM\ArrayCollection $users)
    {
        /** @var \Entities\Users $user */
        $user = current($this->users);
    }
}

下面是一个解决方案,它使您能够在
集合
方法和对象方法上进行自动完成:

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

    foreach ($users as $user) {
        $user-> // autocompletion on User methods work
    }
}

至少在PhpStorm中它就像一个符咒。

我在某个地方也遇到过,它代表了一系列的。但是,不强制集合本身的类!我希望能有更明确、更少重复的东西。。。如果您有几种方法涉及
$this->users
,这意味着大量docblock复制
ArrayCollection
是一个通用集合,可以采用任何类型的实体(或任何对象);因为它可以包含任何内容,所以集合实体的自动完成无法工作。第三种方法应该可以很好地工作,如果您正在重用
$this->users
,让docblock位于
protected$users,那么在使用它之前只需检查它是否正确减速就足够了。另一方面,docblocks应该准确地解释您的期望。如果您必须对多个方法重复
@param\doctor\ORM\ArrayCollection$users
,那就这样吧。顺便问一下,在使用类型提示时,是否必须明确使用
@param
docblock?我认为IDE和PHPDoc都可以处理这个问题,而
@param
更适合于原语,因为类/接口类型暗示是在语言中构建的;你应该把一切都记录下来。不正确的文档即使不比没有文档更糟糕,也同样糟糕。很好!现在这个问题已经解决了,剩下的唯一一件事是一个实际的类型提示,用于像array和Collection这样的iterable参数:)虽然这在PhpStorm中有效,但我认为这是一个无效的类型提示,因为它说您可以传入一个用户对象数组,在这种情况下,超出magic迭代的任何收集方法都将在上无效。@Rican7
collection
implements
ArrayAccess
。因此,您可以像使用数组一样使用该对象,它将起作用,例如,
$users[]=new User()
@MatthieuNapoli对,但这只是一种方法。现在,您告诉用户他们可以使用数组,但数组不能像集合那样使用。数组没有
isEmpty()
方法。即便如此,ArrayAccess接口也不允许在数组函数中使用类,比如
array\u merge()
。好的,我明白你的意思了。对于其他用户将使用的库,我确实不会使用这种类型提示。但对于我们的团队来说,这是可行的。在PSR-5中,可以使用泛型符号,因此更合适:
集合
。但是我不确定PhpStorm是否能轻松处理这个问题。这个问题几乎是10年前的事了。今天,OP的建议对我来说很好,无论是在PhpStorm还是在诗篇中。诗篇可能还要求添加键类型,因此通常:
Collection