Автозаполнение NetBeans & PHP; заставить __get () тип - PullRequest
8 голосов
/ 19 июля 2011

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

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

Прямо сейчас у меня есть ( in 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 имён?

I'mдумая в одном из следующих направлений:

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

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

1 Ответ

7 голосов
/ 19 июля 2011

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

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

Другое возможное решение для вашего $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();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...