2009-11-25 17 views
73

Solo curioso se esiste un modo in netbeans per fornire suggerimenti di tipo per variabili regolari, in modo che intellisense lo raccolga. So che puoi farlo per proprietà di classe, parametri di funzione, tipi di ritorno, 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).Suggerimento di tipo variabile in Netbeans (PHP)

ex qualcosa di simile:

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

Dove utilizzando $ someservice dopo, NetBeans fornirebbero tutti i metodi disponibili definiti nella classe di Some_Service.

+1

Questo funziona all'interno di una classe, per i membri, ma non so come farlo in funzioni o codice procedurale. –

+1

Mi piacerebbe ridenominare questo in * Variabile tipo hinting in IDE PHP * poiché questo tipo di commento dovrebbe funzionare in tutti gli IDE comuni (NEtBeans, Eclipse, ...). – shadyyx

risposta

158

Una singola linea è tutto ciò che serve:

/* @var $varName Type_Name */ 

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

+0

Funziona come un fascino, grazie per il link. –

+10

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

+1

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

21

So che questa è una questione più grande, ma ero alla ricerca di una risposta simile per Eclipse/Zend Studio e questo ha risolto anche questo.

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

/* @var $varName Type_Name */ 

Nessun altri formati se ...

/** 
* @var $varName Type_Name 
*/ 

o ...

// @var $varName Type_Name 

sembrava funzionare a tutti. Spero che aiuti qualcuno.

+0

utilizzando il metodo di doppia barra elencato las t non ha funzionato per me in NetBeans 7.2 – David

+1

@David Potrebbe non leggere bene, ma ho detto che SOLO i primi lavori. Sebbene entrambi gli altri siano commenti validi, nessuno dei due lavora con il sistema di suggerimento del tipo, almeno per quanto riguarda l'eclissi, non è sicuro di NetBeans. – oucil

+0

Mi spiace, ho letto male la tua risposta. Colpa mia. – David

2

in NetBeans 8.0.2, il vdoc modello che si dà questo:

/* @var $variable type */ 

Netbeans non riconoscerà questo però, e non vi darà l'elenco di completamento automatico corretto per gli oggetti. Invece utilizzare questo, poco prima che la tua dichiarazione di variabile:

/** @var objectType $varName */ 

non ho davvero visto un grande uso per lo stock vdoc Template, in particolare per le variabili di classe che stanno per essere utilizzati come prodotti DOP o PDOStatement oggetti.

Una soluzione che uso è in realtà andare in Strumenti/Opzioni/Editor/Modelli di codice (con PHP selezionato come lingua) e aggiungere un nuovo modello. Ho chiamato il mio suggerimento . Poi sotto di testo esteso, utilizzare il seguente modello:

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

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

+0

Non sono sicuro di quello che stava succedendo con la mia copia di netbeans quando ho postato questa risposta, ma ora sto usando 8.2. /* @var $ varName varType */ funziona bene. – Mike

5

Siete alla ricerca di documentare quei fastidiosi magici variabili? (Ho fatto; La questione si colloca attualmente risultato superiore per che in Google Spero che questo aiuta qualcuno.!)

Il tag @property permette di documentare magici variabili php - quelle realizzate utilizzando __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 innesca completamento automatico, testato in Netbeans 8.1 e PhpStorm 2016,1.

enter image description here

1

Secondo this 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 è possibile aggiungere [] ad un nome di 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 dichiarazione use, ad es. use Foo;

Problemi correlati