工厂的PhpStorm类型提示?

hob*_*rap 14 factory type-hinting phpstorm

我的代码或多或少是这样的:

class Foo {
    public static function factory($str) {
        $class = "Foo_" . $str;
        return new $class;
    }
}
class Foo_Bar {
    public function razzle() {
        print "Foo_Bar->baz() was called";
    }
}

$Obj = Foo::factory('Bar');
Run Code Online (Sandbox Code Playgroud)

我希望PhpStorm能够理解这$Obj是一个Foo_Bar对象,所以例如,如果我输入$Obj->raz,razzle()将显示自动完成.

有没有办法得到这个?告诉PhpStorm该函数Foo::factory($str)返回一个类型的对象Foo_$str?我的猜测是答案是否定的.

Sor*_*rcy 13

据我所知,你不能让PHPStorm理解Foo给出的东西,因为它是动态的.但是你可以通过在它上面放置一个doc注释来告诉PHPStorm你的$ Obj变量是什么,如下所示:

/** @var Foo_Bar $Obj */
$Obj = Foo::factory('Bar');
Run Code Online (Sandbox Code Playgroud)


Laz*_*One 8

是的,如果您的工厂是静态方法,则可以执行此操作.它应该适用于您提供的示例.

更多细节和一些基本示例可以在这里找到:http://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata