PHP: документация/подсказка через @var с несколькими классами/интерфейсами

я использую

/* @var $var Type */ 

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

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

Я хотел бы сделать это, потому что, конечно, у каждого из этих интерфейсов/классов есть специальные методы (которые определены где-то в случае интерфейсов...)

Я пробовал что-то вроде этого:

/* @var $var TypeA|\TypeB|\TypeC */

потому что я видел, что NetBeans будет генерировать аналогичную документацию для методов, возвращающих разные объекты класса из-за переключения/кейса. Но это, кажется, работает только для нотации @return.

я тоже пробовал

/* @var $var TypeA|TypeB */ 

Тоже не работает...

В этом случае NetBeans автоматически заполнит последний указанный тип, но не комбинацию обоих/всех указанных классов.

Как я могу задокументировать, чтобы мое автозаполнение работало так, как хотелось бы (сводка методов всех перечисленных мною классов/интерфейсов)?

С Уважением!


person serjoscha    schedule 18.02.2014    source источник


Ответы (1)


Если я вас правильно понял, вы просите сцепить подсказку через ваш PHP-код.

Проблема в том, что у netbeans нет способа узнать, что на самом деле представляет собой объект; если не скажешь. Решение состоит в том, чтобы использовать команду @property в декларации вашего объекта для прямого определения типа членов объектов, будь то класс или интерфейс.

/**
@property classMyClass1 $clsMyClass1
@property classMyClass2 $clsMyClass2
*/
class baseClass{
    public $clsMyclass1; 
    public $clsMyClass2;

    public function __construct() {
        $this->clsMyClass1 = new classMyClass1();
        $this->clsMyClass2 = new classMyClass2();
    }
}

$foo = new baseClass();

Теперь, когда вы вводите свой код в netbeans, он будет знать, какую подсказку отображать для вашего последнего введенного объекта.

$foo->clsMyClass1->

Пока у каждого класса есть прямое удаление свойств, вы можете связывать их столько, сколько хотите.

$foo->class1->class2->class3->...

Приведенному выше коду потребуется функция autoload() для загрузки правильных файлов классов....

Надеюсь, это поможет вам!

person FunBundle    schedule 04.04.2014
comment
Эй, спасибо за ваш ответ. За все время я обратился к команде netbeans и мне сказали, что это ошибка, которая теперь очень быстро исправлена. Так что моей проблемы больше не будет в новых версиях netbeans: netbeans.org/bugzilla/ show_bug.cgi?id=242351 - person serjoscha; 09.04.2014