Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 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.

like image 885
Dan Lugg Avatar asked Jul 19 '11 17:07

Dan Lugg


People also ask

How do I autocomplete in NetBeans?

Go to Tools > Options > Editor > Code Completion. Select Language Java from dropdown. Auto pop-up on typing any Java identifier part.

How do I turn off suggestions in NetBeans?

If you go into NetBeans > Tools > Options > Editor > Code Completion, you can check or uncheck "Auto Popup Completion Window" for whatever Languages you want.

How do I Auto Import in NetBeans?

Use Ctrl + Shift + I will import all the required packages.


1 Answers

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:

netbeans intellisense with @property


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.

like image 72
edorian Avatar answered Oct 10 '22 19:10

edorian