Podpowiedzi do zmiennych typów w Netbeans (PHP)


85

Ciekawe, czy w netbeans jest sposób, aby podać wskazówki typu dla zwykłych zmiennych, aby Intellisense je wychwycił. Wiem, że możesz to zrobić dla właściwości klas, parametrów funkcji, typów zwracanych itp., Ale nie mogę dowiedzieć się, jak to zrobić dla zwykłych zmiennych. Jest to coś, co naprawdę pomogłoby w sytuacjach, w których masz metodę, która może zwracać różne typy obiektów (np. Lokalizator usług).

np. coś takiego:

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

W przypadku późniejszego użycia $ someService netbeans zapewniłoby wszystkie dostępne metody zdefiniowane w klasie Some_Service.


1
Działa to wewnątrz klasy, dla członków, ale nie wiem, jak to zrobić w funkcjach lub kodzie proceduralnym.
David Snabel-Caunt

1
Pomyślałbym o zmianie nazwy tego na Variable type hinting w PHP IDE, ponieważ ten typ komentarza powinien działać we wszystkich popularnych IDE (NEtBeans, Eclipse, ...).
shadyyx

Odpowiedzi:


186

Wystarczy jedna linia:

/* @var $varName Type_Name */

Zobacz ten artykuł na blogu NetBeans PHP: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

Uwaga: przynajmniej w wersji 8.2; Wydaje się, że kluczem jest:

  • Pojedyncza gwiazdka ( /*zamiast /**).
  • Umieszczenie typu po nazwie zmiennej.
  • Nie mając nic przed i po podpowiedziach do typu (z wyjątkiem białych znaków, ale nawet to nie jest dozwolone, gdy komentarz nie znajduje się w jednym wierszu).

16
Kluczem wydaje się być pojedyncza gwiazdka / * zamiast / **. Przynajmniej w wersji 8.0. Dzięki.
Cypher

1
Wydaje się, że w ogóle nie działa, jeśli musimy użyć vdoc do właściwości obiektu, tj.Jeśli go $this->obj = $serviceLocator->get('obj');używam /* @var $obj Obj */, nie działa ...
shadyyx

2
@shadyyx W takim razie powinieneś użyć /** @var Type_Name */, zobacz ten post ?
Apostoł

6
Pamiętaj, że możesz wpisać vdocw wierszu nad zmienną, którą zamierzasz udokumentować, a następnie nacisnąć, Taba to zadziała jak makro, aby automatycznie utworzyć blok dokumentu @johannes powyżej.
Tom Auger

1
Jeśli chcesz, aby NetBeans obsługiwał również alternatywne składnie, skomentuj / głosuj na prośbę o funkcję: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

Wiem, że to starsze pytanie, ale szukałem podobnej odpowiedzi dla Eclipse / Zend Studio i to również rozwiązało problem.

** Należy jednak pamiętać, że musi znajdować się w jednej linii z otwarciem i zamknięciem wyraźnie w tym stylu ...

/* @var $varName Type_Name */

Żadnych innych formatów, czy ...

/**
 * @var $varName Type_Name
 */ 

lub...

// @var $varName Type_Name

wydawało się, że w ogóle działa. Mam nadzieję, że to komuś pomoże.


Korzystanie z metody podwójnego ukośnika wymienionej ostatnio nie działa dla mnie w NetBeans 7.2
David,

1
@David Może nie czyta się dobrze, ale powiedziałem, że TYLKO pierwsza działa. Chociaż oba pozostałe są poprawnymi komentarzami, żaden z nich nie działa z systemem podpowiedzi typu, przynajmniej jeśli chodzi o zaćmienie, nie jestem pewien co do NetBeans.
oucil

1
Netbeans (8.01) akceptuje tylko pierwszą opcję, używając / *, ale phpStorm (8) obsługuje również / **.
Jop van Raaij

9

Chcesz udokumentować te nieznośne magiczne zmienne? (Tak; to pytanie zajmuje obecnie czołowe miejsce w Google. Mam nadzieję, że to komuś pomoże!)

@propertyTag pozwala udokumentować magiczne zmienne php - te realizowane za pomocą __get()a __set(). Znacznika należy używać w dokumentacji bezpośrednio poprzedzającej definicję klasy:

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

Ta notacja uruchamia autouzupełnianie, testowane w Netbeans 8.1 i PhpStorm 2016.1.

wprowadź opis obrazu tutaj


3

Zgodnie z tym zgłoszeniem błędu składnia zmieni się w NetBeans 9 :

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

Warto też wspomnieć, że []do nazwy klasy można dołączyć tablicę obiektów:

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

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

I nie zapomnij swojego useoświadczenia, npuse Foo;


2

W netbeans 8.0.2 szablon vdoc daje ci to:

/* @var $variable type */

Netbeans nie rozpozna tego jednak i nie poda poprawnej listy autouzupełniania dla twoich obiektów. Zamiast tego użyj tego, tuż przed deklaracją zmiennej:

/** @var objectType $varName */

Naprawdę nie widziałem dobrego zastosowania szablonu vdoc zapasowego , szczególnie dla zmiennych klas, które mają być używane jako obiekty PDO lub PDOStatement.

Jednym z rozwiązań, których używam, jest faktycznie przejście do Narzędzia / Opcje / Edytor / Szablony kodu (z PHP wybranym jako język) i dodanie nowego szablonu. Zadzwoniłem do mojej podpowiedzi . Następnie w obszarze Rozszerzony tekst użyj następującego szablonu:

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

3
Hm, mam NB 8.0.2 i dla mnie jest odwrotnie. Typ zmiennej / * @var $ * / działa dobrze. Próbowałem użyć twojej łatki do szablonów. ale to nie zadziałało.
userfuser

1
Nie jestem pewien, co się działo z moją kopią netbeans, kiedy po raz pierwszy opublikowałem tę odpowiedź, ale teraz używam wersji 8.2. / * @var $ varName varType * / działa dobrze.
Mike

0

Dla NetBeans IDE 8.2 składnia jest następująca:

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

Zapewni to prawidłowe wskazówki dotyczące typu przynajmniej dla zmiennych statycznych.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.