Натякання на змінний тип у Netbeans (PHP)


85

Просто цікаво, чи є спосіб у netbeans давати підказки типу для регулярних змінних, так що intellisense це підхоплює. Я знаю, що ви можете це зробити для властивостей класу, параметрів функції, типів повернення тощо, але я не можу зрозуміти, як це зробити для звичайних змінних. Це те, що дійсно допомогло б у ситуаціях, коли у вас є метод, який може повертати різні типи об’єктів (наприклад, локатор послуг).

наприклад щось на зразок:

/**
 * @var Some_Service $someService
 */
$someService = ServiceLocator::locate('someService');

У разі використання $ someService пізніше, netbeans надаватиме всі доступні методи, визначені в класі Some_Service.


1
Це працює всередині класу для учасників, але я не знаю, як це зробити у функціях або процедурному коді.
Девід Снабель-Коунт,

1
Я б подумав про перейменування цього на натяк на тип змінної в IDE PHP, оскільки цей тип коментарів повинен працювати у всіх поширених середовищах розробки (NEtBeans, Eclipse, ...).
shadyyx

Відповіді:


186

Все, що вам потрібно - один рядок:

/* @var $varName Type_Name */

Дивіться цю статтю в блозі PHP NetBeans: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

Примітка: Принаймні, у версії 8.2; Здається, ключовим є:

  • Поодинока зірочка ( /*замість /**).
  • Розміщення типу після імені змінної.
  • Не маючи нічого до і після підказки типу (крім пробілів, але навіть це заборонено, коли коментар не знаходиться в одному рядку).

16
Здається, ключовим тут є одна зірочка / * замість / **. Принаймні, у версії 8.0. Дякую.
Сайфер

1
Здається, це взагалі не працює, якщо нам потрібно використовувати vdoc для властивості об’єкта, тобто $this->obj = $serviceLocator->get('obj');якщо я використовую, /* @var $obj Obj */це не працює ...
shadyyx

2
@shadyyx У цьому випадку вам слід скористатися /** @var Type_Name */, перегляньте цю публікацію ?
Апостол

6
Пам'ятайте, що ви можете ввести vdocв рядок над змінною, яку ви збираєтеся документувати, а потім натиснути, Tabі це буде діяти як макрос для автоматичного створення блоку документа @johannes повідомлення вище.
Tom Auger

1
Якщо ви хочете, щоб NetBeans також підтримував альтернативні синтаксиси, будь-ласка, прокоментуйте / проголосуйте щодо запиту на функцію: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

Я знаю, що це давнє запитання, але я шукав подібну відповідь для Eclipse / Zend Studio, і це також його вирішило.

** Зверніть увагу, що він повинен бути в одному рядку з відкритим і закритим явно в цьому стилі ...

/* @var $varName Type_Name */

Немає інших форматів, чи ...

/**
 * @var $varName Type_Name
 */ 

або ...

// @var $varName Type_Name

здавалося, взагалі спрацювало. Надія, що комусь допомагає.


Використання методу подвійної косої риски, перерахований останній раз, не працював для мене в NetBeans 7.2
Девід

1
@David Можливо, це погано читається, але я сказав, що ТІЛЬКИ перші роботи. Хоча обидва інші є слушними коментарями, жоден з них не працює з системою натяку на тип, принаймні, що стосується затемнення, не впевнений у NetBeans.
oucil

1
Netbeans (8.01) приймає лише перший варіант, використовуючи / *, але phpStorm (8) також підтримує / **.
Йоп ван Раадж

9

Ви хочете задокументувати ці докучливі магічні змінні? (Я зробив; це запитання наразі займає найкраще місце серед результатів у Google. Сподіваюся, це комусь допоможе!)

@propertyТег дозволяє документувати магічний змінний PHP - ті , реалізовано з використанням __get()і __set(). Тег слід використовувати в документації безпосередньо перед визначенням класу:

/**
 * Class Contact
 * @property string $firstName
 * @property string $lastName
 */
class Contact extends Model {
   ...

Цей запис запускає автозаповнення, протестоване в Netbeans 8.1 та PhpStorm 2016.1.

введіть тут опис зображення


3

Згідно з цим звітом про помилки , синтаксис зміниться в NetBeans 9 :

/* @var $variable VarType */    // vdoc1 (legacy syntax)
/** @var VarType $variable */   // vdoc (new syntax)

Також варто згадати, що ви можете додати []до імені класу, щоб вказати масив об’єктів:

/* @var $foos Foo[] */
$foos = // ...

foreach ($foos as $foo) {
    // $foo will be hinted as Foo here
}

І не забудьте своє useтвердження, напрuse Foo;


2

У netbeans 8.0.2 шаблон vdoc дає вам таке:

/* @var $variable type */

Однак Netbeans цього не розпізнає і не надасть вам правильний список автозаповнення для ваших об'єктів. Натомість використовуйте це безпосередньо перед оголошенням змінної:

/** @var objectType $varName */

Я насправді не бачив великого використання шаблону stock vdoc , особливо для змінних класу, які збираються використовувати як об'єкти PDO або PDOStatement.

Одне з рішень, яке я використовую, - це зайти в Інструменти / Параметри / Редактор / Шаблони коду (із вибраною мовою PHP) та додати новий шаблон. Я назвав свій натяк . Потім у розділі Розгорнутий текст використовуйте такий шаблон:

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */

3
Хм, у мене NB 8.0.2, і для мене все навпаки. Тип змінної / * @var $ * / відмінно працює. Я спробував використати ваш патч для шаблонів. але це не спрацювало.
userfuser

1
Я не впевнений, що саме відбувалося з моєю копією netbeans, коли я вперше розмістив цей відповідь, але зараз використовую 8.2. / * @var $ varName varType * / прекрасно працює.
Майк,

0

Для NetBeans IDE 8.2 синтаксис такий:

class foobar{
    /** @var string $myvar: optional description here **/
    protected static $myvar;
}

Це забезпечить належним чином підказки для типу принаймні для статичних змінних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.