Php 条令集合的docblock
在条令项目的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 { /
/**
* @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迭代的任何收集方法都将在上无效。@Rican7collection
implementsArrayAccess
。因此,您可以像使用数组一样使用该对象,它将起作用,例如,$users[]=new User()
@MatthieuNapoli对,但这只是一种方法。现在,您告诉用户他们可以使用数组,但数组不能像集合那样使用。数组没有isEmpty()
方法。即便如此,ArrayAccess接口也不允许在数组函数中使用类,比如array\u merge()
。好的,我明白你的意思了。对于其他用户将使用的库,我确实不会使用这种类型提示。但对于我们的团队来说,这是可行的。在PSR-5中,可以使用泛型符号,因此更合适:集合
。但是我不确定PhpStorm是否能轻松处理这个问题。这个问题几乎是10年前的事了。今天,OP的建议对我来说很好,无论是在PhpStorm还是在诗篇中。诗篇可能还要求添加键类型,因此通常:Collection