PHPDoc容器对象就像数组一样

时间:2015-10-20 06:20:33

标签: php phpstorm phpdoc

是否可以指示对象的行为类似于容器,在编写文档时实现\ArrayAccess,特别是@return

例如,如果我有一个class Collection implements \ArrayAccess, \Countable, \IteratorAggregate对象填充了数据库中的Entity个对象。

我希望PHPStorm(具体)提供Collection个对象的提示,以及了解它们的价值。

目前我们有对象数组的表示法

/**
* @return \Entity[]
*/

这意味着该方法返回一个实体数组。我怎么能为不同的班级做同样的事情呢?我正在考虑这样的事情:

/**
* @return \Entity[\Collection]
*/

我创建了一个pastebin(请注意,它已链接到另外两个用于EntityCollection类的粘贴代码。)

PASTEBIN example

2 个答案:

答案 0 :(得分:2)

根据您的pastebin示例在正确位置单个类型提示似乎已足够(在PhpStorm v9.5 EAP版本中测试):

/** @var \Collection|\Entity[] $collection */
$collection = new Collection($entities);

对于$collection,它提供\Collection类:

中的方法

enter image description here

对于$entity(在foreach循环内),它提供\Entity方法:

enter image description here

如果有的话,你总是可以单独输入提示$entity变量:

enter image description here

答案 1 :(得分:1)

就我所知,你似乎想要的东西(目前)并不是真的。我不久前曾试图获得相同的功能。

但是,您可以这样做:

<?php

/**
 * @return MyCollectionType
 */
function getEntityCollectionFromSomewhere()
{
    return ...
}

$myEntityCollection = getEntityCollectionFromSomewhere();

foreach($myEntityCollection as $entity)
{
    if ($entity instanceof MyEntityType)
    {
        // code completion is active here for MyEntityType...
    }
}

这是迄今为止我发现的最好的;您可以使用集合完成集合,以及使用该集合中的单个元素的实体功能。