【发布时间】:2016-03-25 09:29:48
【问题描述】:
我想我可能需要在某处添加一个特殊的注释,但我很担心 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);
}
但我想随着我添加更多集合类,这会变得有点荒谬到无用的地步。
【问题讨论】: