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 implementation 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.
Go to Tools > Options > Editor > Code Completion. Select Language Java from dropdown. Auto pop-up on typing any Java identifier part.
If you go into NetBeans > Tools > Options > Editor > Code Completion, you can check or uncheck "Auto Popup Completion Window" for whatever Languages you want.
Use Ctrl + Shift + I will import all the required packages.
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.
<?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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With