NetBeans autocomplete & PHP; force __get() type
Quick one on NetBeans 7.0 and autocomplete for PHP;
I'm trying to figure out (if possible) how to force __get()
implemented in a class to return (refer to) a certain type, the type being the same class in which __get()
is implemented, always.
Right now, I have (in View
):
/**
* @param string $key
* @return View
*/
public function __get($key){
return $this->getView($key);
}
Accessed like so:
$view->foo-> // should populate with methods from View
^
Now I've been reading about the @property
, but I'm not sure if that's correct for what I'm doing. The other thing is (and this would be a nice feature if possible) typically views are nested, so it's not uncommon in my implementat开发者_运维百科ion to see this:
$view->foo->bar->baz-> // should populate with methods from View
^
Any idea on how to force this, or am I stuck?
Update:
So @property
seems to be heading the correct direction, however there doesn't seem to be support for wildcarding the property names. So to elaborate on my question, does anyone know of any NetBeans plugins, or undocumented (or just plain hard to find) PHPDoc syntax for supporting wildcard @property
names?
I'm thinking in one of these directions:
/**
* @property View *
* @property View ...
* @property View $var,...
*/
Of course, none of these variations work, however the last would seem most logical, as they seem to support a similar syntax for variadic function parameter lists.
Netbeans can work that magic for you with the @property
like shown in the example below.
As you already have figured out you will have to define each property in the doc block.
Another possible solution for your $x->y->z->view
example is listed below.
Copy & paste this into Netbeans and it will show the methods of the Bar class:
<?php
/**
* @property Bar $prop
*/
class foo {
}
class bar {
public function xyz() {
}
public function abc() {
}
}
$x = new foo();
$x->prop->
When you move the cursor here and press ctrl+space you will see:
If you want autocomplete for a longer resulton chain you can also use
/** @var Viewclass $foo */
$foo = $x->y->z->view;
$foo->autoCompleteWorksNow();
anywhere in your code.
精彩评论