如何用抽象工厂方法来判断变量的PhpStorm类型?

如何用抽象工厂方法来判断变量的PhpStorm类型?,php,phpstorm,jetbrains-ide,Php,Phpstorm,Jetbrains Ide,我有一个这样的抽象类 abstract class AbstractClass { /** * @return AbstractClass */ public static function forge($data) { return new static($data); } } 和另一个继承它的类 class OtherClass extends AbstractClass { public function m

我有一个这样的抽象类

abstract class AbstractClass
{
    /** 
     * @return AbstractClass
     */ 
    public static function forge($data)
    {
        return new static($data);
    }
}
和另一个继承它的类

class OtherClass extends AbstractClass
{
    public function my_method()
    {
        echo 'hello';
    }
}
当我打这样的电话时

$otherClass = OtherClass::forge($otherclass_data);
PhpStorm不会自动完成
my_method()
,事实上会弹出一个错误:

Method 'my_method' not found in class 'AbstractClass'

我有没有办法强迫PhpStorm知道我伪造了一个
OtherClass
,而不是
AbstractClass

在这种情况下使用
@return static
,例如

abstract class AbstractClass
{
    /** 
     * @return static
     */ 
    public static function forge($data)
    {
        return new static($data);
    }
}
这样,它将被解析为调用类

p.S. 类似地,
@return$此
可用于非静态方法

p.p.S.
请注意,在一些不太简单的情况下(例如,在另一个类的另一个方法中使用具有此类
@return
(static或$this)的某个类的某个方法,而另一个类的另一个方法也使用此类方法),可能会导致IDE混淆,从而产生错误警告——这是一个IDE问题,有望在未来的某个版本中得到解决。

。。但是您的
forge
方法无论如何都不会返回任何内容。。。另外,在静态方法中使用
$this
…您是对的,作为一个简单的例子,我对它进行了编辑,以使我的问题更加清晰不知道您从哪里得到了错误?我运行了您的示例,它给出的警告与类抽象无关。它不会自动完成
OtherClass::my_方法
,因为my_方法不是静态的,不应该静态引用。如果实例化一个OtherClass,例如
$OtherClass=new OtherClass()和键入
$otherClass->
它将为
forge
mou方法提供自动完成建议。你能提供一个实际导致这个错误的例子吗?啊,在我的例子中,ide似乎是混乱的。