我可以指示返回到PhpStorm的动态类型吗


Can I indicate dynamic type returned to PhpStorm?

我有三个类,比如:

class Foo
{
    static function test()
    {
       return new static();
    }
}
class Bar extends Foo
{}
class Baz extends Foo
{}

现在如果调用:

$var = Bar::test();

我想让PhpStorm将$var识别为called_class,这里是:Bar

但是,如果我做$var = Baz::test();$var就是Baz实例。

如何让动态called_class向PhpStorm指示返回的类型?

我有一个类似的语法

/** @return "called_class" */

帮助PhpStorm并指明类型?

首先,您的静态函数中有一个错误。你不能使用

 return $this;

因为静态调用不会创建任何实例。因此,您必须创建一个新实例。

class Foo
{
    public static function test()
    {
        return new static();
    }
}

static关键字将实例化类本身的一个新实例。

class Bar extends Foo
{
    public function fooBar(){}
}
class Baz extends Foo
{
    public function fooBaz(){}
}

我刚刚添加了foo函数,向您展示phpStorm现在可以正确地找到源代码。

$var = Bar::test();
$var->fooBar();

$var现在是Bar 的一个实例

$var2 = Baz::test();   
$var2->fooBaz();

$var2现在是Baz 的一个实例