Suggerimenti sul tipo di variabile in Netbeans (PHP)


86

Sono solo curioso di sapere se esiste un modo in netbeans per dare suggerimenti sul tipo per variabili regolari, in modo che intellisense lo raccolga. So che puoi farlo per proprietà di classe, parametri di funzione, tipi restituiti, ecc. Ma non riesco a capire come farlo per variabili regolari. È qualcosa che potrebbe davvero aiutare in situazioni in cui si dispone di un metodo che può restituire diversi tipi di oggetto (come un localizzatore di servizi).

ex qualcosa come:

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

Quando si utilizza $ someService in seguito, netbeans fornirebbe tutti i metodi disponibili definiti nella classe Some_Service.


1
Funziona all'interno di una classe, per i membri, ma non so come farlo nelle funzioni o nel codice procedurale.
David Snabel-Caunt

1
Penserei di rinominarlo in suggerimento di tipo variabile negli IDE PHP poiché questo tipo di commento dovrebbe funzionare in tutti gli IDE comuni (NEtBeans, Eclipse, ...).
shadyyx

Risposte:


187

Una sola riga è tutto ciò di cui hai bisogno:

/* @var $varName Type_Name */

Vedi questo articolo nel blog NetBeans PHP: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

Nota: almeno nella versione 8.2; La chiave sembra essere:

  • Il singolo asterisco ( /*invece di /**).
  • Posizionando il tipo dopo il nome della variabile.
  • Non avere nulla prima e dopo il suggerimento del tipo (tranne lo spazio bianco, ma anche questo non è consentito quando il commento non è in una singola riga).

17
La chiave qui sembra essere il singolo asterisco / * invece di / **. Almeno, nella versione 8.0. Grazie.
Cypher

1
Sembra non funzionare affatto se dobbiamo usare vdoc per la proprietà dell'oggetto, cioè perché $this->obj = $serviceLocator->get('obj');se lo uso /* @var $obj Obj */non funziona ...
shadyyx

2
@shadyyx In questo caso dovresti usare /** @var Type_Name */, vedi questo post ?
Apostolo

6
Ricorda che puoi digitare vdocsulla riga sopra la variabile che stai per documentare e poi Tabpremere e questa agirà come una macro per creare automaticamente il blocco doc @johannes post sopra.
Tom Auger

1
Se si desidera NetBeans per sostenere sintassi alternative pure, prego commento / voto sulla richiesta di funzionalità: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

So che questa è una vecchia domanda, ma stavo cercando una risposta simile per Eclipse / Zend Studio e anche questo l'ha risolta.

** Nota però che deve essere su una sola riga con l'apertura e la chiusura esplicitamente in questo stile ...

/* @var $varName Type_Name */

Nessun altro formato se ...

/**
 * @var $varName Type_Name
 */ 

o...

// @var $varName Type_Name

sembrava funzionare affatto. Spero che aiuti qualcuno.


L'utilizzo del metodo della doppia barra elencato per ultimo non ha funzionato per me in NetBeans 7.2
David

1
@David Potrebbe non leggere così bene, ma ho detto che SOLO i primi lavori. Sebbene entrambi gli altri siano commenti validi, nessuno dei due funziona con il sistema di suggerimento del tipo, almeno per quanto riguarda eclipse, non sono sicuro di NetBeans.
oucil

1
Netbeans (8.01) accetta solo la prima opzione, usando / *, ma anche phpStorm (8) supporta / **.
Jop van Raaij

9

Stai cercando di documentare quelle fastidiose variabili magiche ? (L'ho fatto; questa domanda attualmente occupa il primo posto in Google. Spero che questo aiuti qualcuno!)

Il @propertytag ti consente di documentare le variabili php magiche , quelle implementate usando __get()e __set(). Il tag deve essere utilizzato nella documentazione immediatamente precedente la definizione della classe:

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

Questa notazione attiva il completamento automatico, testato in Netbeans 8.1 e PhpStorm 2016.1.

inserisci qui la descrizione dell'immagine


3

Secondo questo bug report , la sintassi cambierà in NetBeans 9 :

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

Inoltre, vale la pena ricordare che puoi aggiungere []al nome di una classe per indicare un array di oggetti:

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

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

E non dimenticare la tua usedichiarazione, ad esuse Foo;


2

In netbeans 8.0.2, il modello vdoc ti offre questo:

/* @var $variable type */

Netbeans non lo riconoscerà, tuttavia, e non ti fornirà l'elenco di completamento automatico corretto per i tuoi oggetti. Usa invece questo, appena prima della dichiarazione della variabile:

/** @var objectType $varName */

Non ho visto un grande utilizzo del modello vdoc stock , in particolare per le variabili di classe che verranno utilizzate come oggetti PDO o PDOStatement.

Una soluzione che utilizzo in realtà è quella di andare in Strumenti / Opzioni / Editor / Modelli di codice (con PHP selezionato come lingua) e aggiungere un nuovo modello. Ho chiamato il mio suggerimento . Quindi, in Testo espanso, utilizza il seguente modello:

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

3
Hm, ho NB 8.0.2 e per me è il contrario. Il tipo di variabile / * @var $ * / funziona bene. Ho provato a usare la tua patch per i modelli. ma non ha funzionato.
userfuser

1
Non sono sicuro di cosa stesse succedendo con la mia copia di netbeans quando ho postato per la prima volta questa risposta, ma ora sto usando 8.2. / * @var $ varName varType * / funziona perfettamente.
Mike

0

Per NetBeans IDE 8.2 la sintassi è la seguente:

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

Ciò fornirà i suggerimenti sul tipo correttamente almeno per le variabili statiche.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.