PhpStorm可以推断出这种方法的返回类型吗?

时间:2016-03-25 09:29:48

标签: phpstorm phpdoc

我想我可能需要在某个地方添加一个特殊的注释,但我正在指责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);
    }

但是我想,当我添加更多的集合类时,这会变得有点荒谬。

1 个答案:

答案 0 :(得分:2)

试试这个:

/**
 * @method \User getFirst()
 */
class UserCollection extends Collection
{
    protected static $requiredType = 'User';
}