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(请注意它有指向 Entity
和 Collection
classes 的另外两个 pastebin 的链接)。
据我所知,你似乎想要的东西(目前)无法真正完成。前段时间我自己尝试过获得相同的功能。
但是,您可以这样做:
<?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
变量:
是否可以指示对象的行为类似于容器,在编写文档时实现 \ArrayAccess
,特别是 @return
。
例如,如果我有一个 class Collection implements \ArrayAccess, \Countable, \IteratorAggregate
对象,其中填充了来自数据库的 Entity
个对象。
我想要的是 PHPStorm
(特别是)为 Collection
对象提供提示并了解它们的值。
目前我们有对象数组的这种表示法
/**
* @return \Entity[]
*/
这意味着方法 returns 一个实体数组。我怎样才能对不同的 class 做同样的事情?我在想这样的事情:
/**
* @return \Entity[\Collection]
*/
我创建了一个 pastebin(请注意它有指向 Entity
和 Collection
classes 的另外两个 pastebin 的链接)。
据我所知,你似乎想要的东西(目前)无法真正完成。前段时间我自己尝试过获得相同的功能。
但是,您可以这样做:
<?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
变量: