Bee*_*ice 5 php phpdoc phpstorm
考虑这个代码:
class ParentClass {
public static function generate($className = __CLASS__){
if(!$className) return new self();
else return new $className();
}
}
class ChildClass extends ParentClass {
/**
* @param string $className
* @return ChildClass
*/
public static function generate($className = __CLASS__) {
return parent::generate($className);
}
}
var_dump($ChildClass::generate()); // object(ChildClass)[1]
Run Code Online (Sandbox Code Playgroud)
ChildClass::generate()返回ChildClass我使用它的任何地方的实例,因为我从不提供$className参数。问题是我的 IDE 给了我一个关于parent::generate()调用与记录的返回类型不匹配的警告:
我想通过向父方法添加文档来消除此警告。我可以:
@return ParentClass | ChildClass
Run Code Online (Sandbox Code Playgroud)
将这个添加到父方法中是可行的,但这并不实用,因为有很多子类,而且将来可能会有更多。我已经尝试了以下两种方法:
@return static
@return $className
Run Code Online (Sandbox Code Playgroud)
但这并没有使警告消失。是否有 PHPDoc 批准的方法来指示调用子类将始终返回?或者——更准确地说——$className将返回一个类型的类?如果没有,有没有一种方法可以在我的 IDE 中工作?( PhpStorm 2017.2)
@gogaz 下面的评论让我想到:如果 PHPDoc@return可以表明类似的东西就足够了self | descendants
我遇到过类似的东西(PHPStorm 在这个主题上比 PHP 更肛门)。除非有某种原因你必须让它特定于子类,否则我会这样做
class ParentClass {
/**
* @param string $className
* @return ParentClass
*/
public static function generate($className = __CLASS__){
if(!$className) return new self();
else return new $className();
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,您的ChildClass仍然是一个实例ParentClass
| 归档时间: |
|
| 查看次数: |
1237 次 |
| 最近记录: |