Home » Php » class – NetBeans autocomplete & PHP; force __get() type

class – NetBeans autocomplete & PHP; force __get() type

Posted by: admin July 12, 2020 Leave a comment

Questions:

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.

How to&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.