想象一下以下假设的类结构,这不是一个非常罕见的场景,所有 PHPdoc 提示都正确设置:
class BaseFilter {
/** ...base methods... */
}
class TextFilter extends BaseFilter {
public function setMinLength($len)
{
/** ...irrelevant */
}
}
class SomethingWithFilters
{
/**
* @param BaseFilter $filter A valid filter to be added.
* @return BaseFilter The filter that was added for easy chaining
*/
public function addFilter(BaseFilter $filter)
{
$this->filters[] = $filter;
return $filter;
}
/** @var BaseFilter[] A list of filters */
private $filters = [];
}
现在我使用此代码如下:
$myClass = new SomethingWithFilters();
$myClass->addFilter(new TextFilter())->setMinLength(8);
在 phpStorm(可能还有大多数其他 IDE,因为它是有意义的)中,第二行会产生一个警告,指出它BaseFilter
不包含方法setMinLength
。虽然绝对正确,但这是有意的多态行为,充分利用了 PHP 的后期绑定特性——在像 C# 这样的语言中,您必须显式地向上转换。因此,我希望 phpDoc 语法在这里支持某种动态表示法,说明返回类型addFilter
与提供的类型相同$filter
。
我尝试将其更改为:
@return $filter
但这只是作为参考出现BaseFilter
并被视为这样,仍然发出警告。
有没有什么标准化的方式来达到这个效果,至少普通的IDE都能理解?