DynamicReturnTypePlugin PhpStorm dynamicReturnTypeMeta.json:
{
"methodCalls": [
{
"class": "\\MyOwnWrapperOfDIContainer",
"method": "get",
"position": 0
},
{
"class": "\\Pimple\\Container",
"method": "offsetGet",
"position": 0
}
]
}
: , Pimple\Container ( ArrayAccess::offsetGet), PhpStorm , . . :.
$c = new Pimple\Container;
$c['MyClass']->methodOfMyClass();
:
$myClassInstance = MyOwnWrapperOfDIContainer::get(MyClass::class);
$myClassInstance->methodOfMyClass(); // autocompletion works here
Pimple , , . E. g., :
$c = new Pimple\Container;
$c['my-favourite-var'] = new MyClass(1);
$c[MyClass::class] = new MyClass(2);
$c['my-favourite-var']->methodOfMyClass();
$c['MyClass']->methodOfMyClass();
:
class MyFavouriteVar extends MyClass;
$c[MyFavouriteVar::class] = new MyFavouriteVar(2);
$c[MyFavouriteVar::class] = new MyClass(2);
$c[MyFavouriteVar::class]->/*now autocompletion works fine*/methodOfMyClass();
...
1
:
http://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata
2
https://github.com/Sorien/silex-idea-plugin
edit 3
, :
class MyPimple extends Pimple\Container
{
public function get($type, $desc = null) {
return $this[$type . (isset($desc) ? ':' . $desc : '')];
}
}
$c = new MyPimple;
$c[MyClass::class] = new MyClass('default');
$c[MyClass::class . ':' . 'my-special-value'] = new MyClass('special');
$c->get(MyClass::class, 'my-special-value')->methodOfMyClass();
dynamicReturnTypeMeta.json :
{
"methodCalls": [
{
"class": "\\MyPimple",
"method": "get",
"position": 0
}
]
}