class A {
/**
* @return static|bool
*/
public static function build()
{
if (/**/) {
return new static;
}
return false;
}
}
class B extends A {}
$o = B::build();
PHP Storm不理解$o中有B实例。如果我在return
注释中只保留static
而没有第二个类型,那么一切都是好的。
目前PhpStorm还没有正确理解@return static|bool
——现在只有@return static
自己在工作。
https://youtrack.jetbrains.com/issue/WI-23435--观看此票和相关票(星号/投票/评论(以获得进度通知。
部分解决方法:通过内联PHPDoc键入变量提示(在您的情况下为$o
(,例如
/** @var B $o */
$o = B::build();
一个不太优雅的变通方法:
class A {
protected $class_name;
public static function build()
{
return $class_name::static_variable;
}
}
class B extends A {
protected $class_name="B";
}
$o = B::build();