Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PhpStorm type-hinting for factories?

I have code more or less like this:

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

and I would like PhpStorm to understand that $Obj is a Foo_Bar object, so that for example if I type $Obj->raz, razzle() will show up for autocompletion.

Is there any way to get this? To tell PhpStorm that the function Foo::factory($str) returns an object of type Foo_$str? My guess is that the answer is no.

like image 835
hobbit.trap Avatar asked Jul 16 '13 01:07

hobbit.trap


2 Answers

As far as I know you can't make PHPStorm understand what Foo is giving out, because it is dynamic. However you can surely tell PHPStorm what your $Obj variable is, by putting a doc comment above it, like so:

/** @var Foo_Bar $Obj */
$Obj = Foo::factory('Bar');
like image 172
Sorcy Avatar answered Sep 29 '22 18:09

Sorcy


Yes, you can do this if your factory is a static method. It should work fine for the examples you have provided.

More details and some basic example can be found here: http://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata

like image 43
LazyOne Avatar answered Sep 29 '22 18:09

LazyOne