Автозаполнение NetBeans & PHP; принудительный тип get()


Быстрый переход на NetBeans 7.0 и автозаполнение для PHP;

Я пытаюсь выяснить (, если возможно ), как заставить __get(), реализованный в классе, возвращать ( ссылаться на ) определенный тип, тип, являющийся тем же классом, в котором __get() реализован, всегда.

Прямо сейчас у меня есть ( в View):

/**
 * @param string $key
 * @return View
 */
public function __get($key){
    return $this->getView($key);
}

Доступ осуществляется следующим образом:

$view->foo-> // should populate with methods from View
            ^

Теперь я читал о @property, но я не уверен, правильно ли это для того, что я делаю. Другое дело ( и это было бы хорошей функцией, если возможно), как правило, представления являются вложенными, поэтому в моей реализации это не редкость:

$view->foo->bar->baz-> // should populate with methods from View
                      ^

Есть идеи, как это сделать, или я застрял?


Обновление:

Таким образом, @property, похоже, движется в правильном направлении, однако, похоже, нет поддержки для подстановки имен свойств. Итак, чтобы уточнить мой вопрос, знает ли кто-нибудь о каких-либо плагинах NetBeans или недокументированных ( или просто трудно найти ) Синтаксис PHPDoc для поддержки имен с подстановочными знаками @property?

Я думаю в одном из следующих направлений:

/**
 * @property View *
 * @property View ...
 * @property View $var,...
 */

Конечно, ни один из этих вариантов не работает, однако последний кажется наиболее логичным, поскольку они, похоже, поддерживают аналогичный синтаксис для списков параметров переменных функций.

Author: Dan Lugg, 2011-07-19

1 answers

Netbeans может сотворить эту магию для вас с помощью @property, как показано в примере ниже.

Как вы уже поняли, вам придется определить каждое свойство в блоке doc.

Другое возможное решение для вашего примера $x->y->z->view приведено ниже.

Скопируйте и вставьте это в Netbeans, и в нем будут показаны методы класса Bar:

<?php

/**
 * @property Bar $prop
 */
class foo {

}

class bar {
    public function xyz() {

    }

    public function abc() {

    }
}

$x = new foo();
$x->prop->

Когда вы переместите курсор сюда и нажмете ctrl+пробел, вы увидите:

netbeans intellisense with @property


Если вы хотите автозаполнение для более длинной цепочки результатов вы также можете использовать

/** @var Viewclass $foo */
$foo = $x->y->z->view;
$foo->autoCompleteWorksNow();

В любом месте вашего кода.

 7
Author: edorian, 2011-07-19 17:21:40