PhpStorm type-hinting for factories?
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');
You should use phpstorm metadata, that works for both dynamic and static calls.
class Foo {
public function factory($str) {
$class = "Foo_" . $str;
return new $class();
}
}
class Foo_Bar {
public function baz() {
print "Foo_Bar->baz() was called";
}
}
$Obj = Foo->factory('Bar');
$Obj->baz();
create a file in your project root directory and name it .phpstorm.meta.php
:
<?php
namespace PHPSTORM_META {
$STATIC_METHOD_TYPES = [
\Foo::factory('') => [
"Bar" instanceof \Foo_Bar,
],
];
}
thanks @LazyOne for link.
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