我想我可能需要在某个地方添加一个特殊的注释,但我正在指责PhpStorm足够聪明,可以根据笨拙的继承模式来解决返回类型。
例如,我有一些类似于此的代码:
<?php
class Collection extends \ArrayObject
{
public function __construct(array $items)
{
foreach ($items as $key => $value) {
if (isset(static::$requiredType) && !$item instanceof static::$requiredType)
$this->offsetSet($key, $value);
}
}
public function getFirst()
{
return $this->offsetGet(0);
}
}
class MessageCollection extends Collection
{
protected static $requiredType = 'Message';
}
class UserCollection extends Collection
{
protected static $requiredType = 'User';
}
如果我在致电UserCollection::getFirst()
时推断已返回User
,我就会喜欢它,而当我致电MessageCollection::getFirst()
时,它会推断已返回Message
。是否有一些注释可以放在某个地方来实现这个结果?
我的第一个想法是这样的:
/**
* @return Message|User|XXXX|YYYY|ZZZZ|AAAA|BBBB|CCCC|DDDD
*/
public function getFirst()
{
return $this->offsetGet(0);
}
但是我想,当我添加更多的集合类时,这会变得有点荒谬。
答案 0 :(得分:2)
试试这个:
/**
* @method \User getFirst()
*/
class UserCollection extends Collection
{
protected static $requiredType = 'User';
}