【发布时间】:2022-01-06 23:00:18
【问题描述】:
我的 PHP 代码结构如下(这种结构是不可更改的):
class BaseFooClass {
}
class ChildFooClass1 extends BaseFooClass {
}
class ChildFooClass2 extends BaseFooClass {
}
//... (there are like a hundred child foo classes)
class BaseBarClass {
protected function getFooBase($input) : BaseFooClass
{
$class = "ChildFooClass" . $input;
return new $class();
}
}
class ChildBarClass1 extends BaseBarClass {
public function getFoo() : ChildFooClass1
{
return $this->getFooBase(1);
}
}
现在在ChildBarClass1 中的getFoo() 函数中,PhpStorm 将给出警告“返回值预计为 'ChildFooClass1','BaseFooClass' 返回”并且它正确地这样做了。
但是我想要一个干净的代码,没有警告而不改变这个结构。
我通过添加 PHP doc 尝试了以下操作:
public function getFoo() : ChildFooClass1
{
/** @var ChildFooClass1 $foo **/
$foo = $this->getFooBase(1);
return $foo;
}
但是这次它给出了一个不同的警告“不必要的局部变量”并要求我将其内联。
有没有消除警告的好方法?
编辑:也尝试了以下方法,但仍然出现“预期返回值...”的警告。
/**
* @return ChildFooClass1
*/
public function getFoo() : ChildFooClass1
{
return $this->getFooBase(1);
}
【问题讨论】:
-
“但是这次它给出了不同的警告“不必要的局部变量”并要求我将其内联。”这样的警告应该不再出现在未来2022.1 版本(甚至可能在即将到来的 2021.3 版本中,但不太可能)youtrack.jetbrains.com/issue/WI-59730
-
如果在文档块中添加@return 会怎样?相当肯定应该有效
-
@Martijn 我也试过了(实际上是 PhpStorm 自动生成的),但不幸的是警告仍然存在。我想最坏的情况是我可以等到未来的版本并暂时接受不必要的警告,至少它不是永远的。
标签: php inheritance phpstorm phpdoc