Показать методы класса с указанием типа

Я не знаю, как именно это сформулировать, но мне нужен способ загрузить подсказки типов методов классов. По сути, у меня есть класс base с функцией get, которая выглядит так:

class Base {

    /**
     * 
     * @param type $i
     * @return \i
     */
    public static function get($i) {
        // make sure it exists before creating
        $classes = get_declared_classes();
        if (!in_array($i, $classes)) {
            if (class_exists($i)) {
                return new $i();
            }
        }
        return $i;
    }
}

Теперь, например, скажем, у меня был класс с именем test:

class test {
    function derp() {
        echo 'derp';
    }
}

Я бы создал экземпляр объекта test примерно так:

$test = base::get('test');

Теперь то, что я хотел бы сделать, это когда я набираю вот так:

$test->

Методы (в настоящее время только derp()) должны быть предложены, я видел документы вокруг SO, но они не работают :(

Странно то, что если я изменю комментарий @return на имя класса test, тогда предложения сработают.

НО если все классы не установлены, могут быть созданы экземпляры разных классов, поэтому я попробовал @returns \i (предложено netbeans). Есть ли способ добиться этого?


РЕДАКТИРОВАТЬ

Причина, по которой мне нужна подсказка типа, заключается в том, чтобы разрешить вызов методов, подобных следующему:

base::get('test')->derp();

person Darren    schedule 25.06.2014    source источник
comment
Я не использую только new?   -  person sectus    schedule 25.06.2014
comment
@sectus Что ты имеешь в виду?   -  person Darren    schedule 25.06.2014
comment
Я имею в виду $test = new test;   -  person sectus    schedule 25.06.2014
comment
@sectus, это был пример. Я бы использовал это для чего-то вроде base::get('test')->derp();, но для предложенных методов.   -  person Darren    schedule 25.06.2014
comment
Вместо base::get('test')->derp(); используйте (new test)->derp();   -  person sectus    schedule 25.06.2014


Ответы (1)


Что всегда работает, так это:

/** @var ADDTYPEHERE $test */
$test = base::get('test');

Что также работает, так это:

if ($test instanceof CLASS_IT_IS) {
  // completion works in here
}

Решение, которое вы хотите, никогда не будет работать, поскольку ваша среда IDE (netbeans) не может знать, какой класс вы создали, без каких-либо подсказок, подобных одному из приведенных выше.

person colburton    schedule 25.06.2014