如何告诉PHP Storm函数返回静态或其他类型


How to tell PHP Storm that the function return static or another type

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();