PHPDoc容器对象的行为类似于数组
是否可以指示对象的行为类似于容器,在编写文档时实现PHPDoc容器对象的行为类似于数组,php,phpstorm,phpdoc,Php,Phpstorm,Phpdoc,是否可以指示对象的行为类似于容器,在编写文档时实现\ArrayAccess,具体地说是@return一个 例如,如果我有一个类集合implements\arrayaaccess、\Countable、\IteratorAggregate对象,其中填充了数据库中的实体对象 我想要的是PHPStorm(特别是)为Collection对象提供提示,并了解它们的值 目前,我们对对象数组使用这种表示法 /** * @return \Entity[] */ 这意味着该方法返回一个实体数组。我怎样才能为不同
\ArrayAccess
,具体地说是@return
一个
例如,如果我有一个类集合implements\arrayaaccess、\Countable、\IteratorAggregate
对象,其中填充了数据库中的实体
对象
我想要的是PHPStorm
(特别是)为Collection
对象提供提示,并了解它们的值
目前,我们对对象数组使用这种表示法
/**
* @return \Entity[]
*/
这意味着该方法返回一个实体数组。我怎样才能为不同的班级做同样的事情?我在想这样的事情:
/**
* @return \Entity[\Collection]
*/
<?php
/**
* @return MyCollectionType
*/
function getEntityCollectionFromSomewhere()
{
return ...
}
$myEntityCollection = getEntityCollectionFromSomewhere();
foreach($myEntityCollection as $entity)
{
if ($entity instanceof MyEntityType)
{
// code completion is active here for MyEntityType...
}
}
我创建了一个(注意,它还有两个链接,分别指向实体
和集合
类)
据我所知,你似乎想要的事情(目前)无法真正做到。不久前,我自己也尝试过获得同样的功能 但是,您可以这样做:
/**
* @return \Entity[\Collection]
*/
<?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 build中测试):
对于$collection
,它提供了\collection
类中的方法:
对于$entity
(foreach循环内部),它提供\entity
方法:
如果有任何问题,请始终分别键入提示$entity
变量:
请您澄清一下您想通过\Entity[\Collection]
实现什么目标(换句话说,这对您意味着什么)。@LazyOne抱歉,我不太清楚。这意味着返回值是由多个实体组成的集合。就像\Entity[]
当前的意思一样,返回值是一个由多个实体组成的数组。。。它同时是实体的集合和数组,对吗?如果是,您是否尝试过\Collection |\Entity[]
语法?这是我现在唯一能想到的。这基本上是一个或
语句,看起来很有趣,但是PHPStorm只会自动完成前面提到的类,在本例中是\Collection:(您能创建并共享一些示例项目(或单个文件)和基本实现来说明您的情况吗(集合和实体类的基本实现以及如何使用它们)?我参与的项目(通常是3-5岁以上)不使用任何集合(或者完全不使用适当的ORM)所以我手头没有任何东西可以快速检查其他选项。很抱歉,但我不明白为什么收集的自动完成应该在这里触发,你确定它不是@return collection
?PHPStorm是否因为if
语句而开始键入hintMyEntityType
?@SergeyTelshevsky:你是对的,我会修正我的错误是的,if instanceof…
构造让PHPStorm了解您的意图,并在那里实现代码完成。此外,/*@var$entity*/
还明确了它只是针对类型的hinting@Alfwed:如果你愿意的话,我只是觉得在我的眼睛。(我不喜欢注释有实际的程序意义)这就是我要找的,奇怪,但我昨天尝试了/**@var\Collection |\Entity[]$Collection*/
,但没有成功,可能是因为phpstorm还在解析代码。不过,我刚刚尝试添加/*@method\EntityCollection |\Entity\Client[]findAll($filter)*/
事实上,它做的每件事都很完美。但我仍然不明白它是如何工作的,以及PHPStorm是如何理解它是一个首先返回的集合实例的。无论如何,它作为@方法
返回值工作的,对此我非常感谢。