Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPDoc容器对象的行为类似于数组_Php_Phpstorm_Phpdoc - Fatal编程技术网

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
语句而开始键入hint
MyEntityType
?@SergeyTelshevsky:你是对的,我会修正我的错误是的,
if instanceof…
构造让PHPStorm了解您的意图,并在那里实现代码完成。此外,
/*@var$entity*/
还明确了它只是针对类型的hinting@Alfwed:如果你愿意的话,我只是觉得在我的眼睛。(我不喜欢注释有实际的程序意义)这就是我要找的,奇怪,但我昨天尝试了
/**@var\Collection |\Entity[]$Collection*/
,但没有成功,可能是因为phpstorm还在解析代码。不过,我刚刚尝试添加
/*@method\EntityCollection |\Entity\Client[]findAll($filter)*/
事实上,它做的每件事都很完美。但我仍然不明白它是如何工作的,以及PHPStorm是如何理解它是一个首先返回的集合实例的。无论如何,它作为
@方法
返回值工作的,对此我非常感谢。