想象一下下面的假想類的結構,而不是與所有PHPDoc的一種極爲罕見的情況下提示的設置正確: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中可以理解?
那麼問題是,如果我定義'@return $ filter',IDE會準確知道我傳遞的參數類型是否已經作爲該參數傳遞過來,因此可以填充它。列出所有過濾器不是框架內的選項因爲別人可能會創建一個新的。感謝您的輸入:) –
'@return $ filter'對IDE沒有意義,因爲$ filter沒有值,除非代碼實際運行 –
phpDocumentor 2.x for @return中流行方法的當前選項是「返回自我「,」返回靜態「和」返回$ this「。目前的實施很簡單,因爲三者都是相同的,但最終它們意味着三件不同的事情。順便說一下,我開始說我會完全避免這個問題,做「$ x = new TextFilter(); $ x-> setMinLength(8); addFilter($ x);」,但我猜測那只是一個外設問題:-) – ashnazg