Автозаполнение 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,...
*/
Конечно, ни один из этих вариантов не работает, однако последний кажется наиболее логичным, поскольку они, похоже, поддерживают аналогичный синтаксис для списков параметров переменных функций.
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+пробел, вы увидите:
Если вы хотите автозаполнение для более длинной цепочки результатов вы также можете использовать
/** @var Viewclass $foo */
$foo = $x->y->z->view;
$foo->autoCompleteWorksNow();
В любом месте вашего кода.