是否可以指示对象的行为类似于容器,在编写文档时实现\ArrayAccess
,特别是@return
。
例如,如果我有一个class Collection implements \ArrayAccess, \Countable, \IteratorAggregate
对象填充了数据库中的Entity
个对象。
我希望PHPStorm
(具体)提供Collection
个对象的提示,以及了解它们的价值。
目前我们有对象数组的表示法
/**
* @return \Entity[]
*/
这意味着该方法返回一个实体数组。我怎么能为不同的班级做同样的事情呢?我正在考虑这样的事情:
/**
* @return \Entity[\Collection]
*/
我创建了一个pastebin(请注意,它已链接到另外两个用于Entity
和Collection
类的粘贴代码。)
答案 0 :(得分:2)
根据您的pastebin示例在正确位置单个类型提示似乎已足够(在PhpStorm v9.5 EAP版本中测试):
/** @var \Collection|\Entity[] $collection */
$collection = new Collection($entities);
对于$collection
,它提供\Collection
类:
对于$entity
(在foreach循环内),它提供\Entity
方法:
如果有的话,你总是可以单独输入提示$entity
变量:
答案 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...
}
}
这是迄今为止我发现的最好的;您可以使用集合完成集合,以及使用该集合中的单个元素的实体功能。