PHPDoc 容器对象充当数组

PHPDoc container objects to act like arrays

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

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

我想要的是 PHPStorm(特别是)为 Collection 对象提供提示并了解它们的值。

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

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

这意味着方法 returns 一个实体数组。我怎样才能对不同的 class 做同样的事情?我在想这样的事情:

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

我创建了一个 pastebin(请注意它有指向 EntityCollection classes 的另外两个 pastebin 的链接)。

PASTEBIN example

据我所知,你似乎想要的东西(目前)无法真正完成。前段时间我自己尝试过获得相同的功能。

但是,您可以这样做:

<?php

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

$myEntityCollection = getEntityCollectionFromSomewhere();

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

这是迄今为止我发现的最好的;您在处理集合时获得集合完成,在处理该集合中的单个元素时获得实体功能。

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

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

对于 $collection 它提供了来自 \Collection class:

的方法

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

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