2009-11-25 7 views
73

Nur neugierig, ob es einen Weg in Netbeans gibt, Typhinweise für reguläre Variablen zu geben, so dass IntelliSense es aufgreift. Ich weiß, dass Sie es für Klasseneigenschaften, Funktionsparameter, Rückgabetypen usw. tun können, aber ich kann nicht herausfinden, wie man es für reguläre Variablen macht. Es ist etwas, das wirklich in Situationen helfen würde, in denen Sie eine Methode haben, die verschiedene Objekttypen zurückgeben kann (wie ein Service-Locator).Variablentyp Hinting in Netbeans (PHP)

ex so etwas wie:

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

Wo nachher $ SOME mit, NetBeans alle in der Klasse Some_Service definiert verfügbaren Methoden bieten würde.

+1

Dies funktioniert innerhalb einer Klasse für Mitglieder, aber ich weiß nicht, wie es in Funktionen oder prozeduralen Code zu tun. –

+1

Ich würde darüber nachdenken, dies zu * Variablentyp Hinting in PHP IDEs * umzubenennen, da diese Art von Kommentar in allen gängigen IDEs (NEtBeans, Eclipse, ...) funktionieren sollte. – shadyyx

Antwort

158

Eine einzelne Linie alles, was Sie brauchen:

/* @var $varName Type_Name */ 

diesen Artikel im Blog NetBeans PHP Siehe: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

+0

Funktioniert wie ein Charme, danke für den Link. –

+10

Der Schlüssel hier scheint der einzelne Stern/* anstelle von/** zu sein. Zumindest in Version 8.0. Vielen Dank. – Cypher

+1

Scheint überhaupt nicht zu funktionieren, wenn wir vdoc für die Objekteigenschaft verwenden müssen, zB für $ this-> obj = $ serviceLocator-> get ('obj'); 'wenn ich'/* @var $ obj Obj * verwende/'es funktioniert nicht ... – shadyyx

21

Ich weiß, das ist eine ältere Frage, aber ich war für eine ähnliche Antwort suchen Eclipse/Zend Studio und das hat es auch gelöst.

** Hinweis aber, dass es mit der Öffnung auf eine einzige Zeile sein muss und schließt ausdrücklich in diesem Stil ...

/* @var $varName Type_Name */ 

Keine andere Formate, ob ...

/** 
* @var $varName Type_Name 
*/ 

oder ...

// @var $varName Type_Name 

schien überhaupt zu funktionieren. Hoffe das hilft jemandem.

+0

Verwendung der Doppel-Schrägstrich-Methode las t funktionierte nicht für mich in NetBeans 7.2 – David

+1

@David Es kann nicht so gut lesen, aber ich habe gesagt, dass nur der erste funktioniert. Obwohl beide andere gültige Kommentare sind, arbeiten beide nicht mit dem Typ-Hinting-System, zumindest was Eclipse angeht, nicht sicher über NetBeans. – oucil

+0

Entschuldigung, ich habe deine Antwort falsch gelesen. Mein Fehler. – David

2

In NetBeans 8.0.2, die VDoc Vorlage gibt Ihnen dies:

/* @var $variable type */ 

Netbeans wird dies jedoch nicht erkennen, und werden Sie nicht die richtige Liste zur automatischen Vervollständigung geben für Ihre Objekte. Statt diese, kurz vor Ihrer Variablendeklaration:

/** @var objectType $varName */ 

Ich habe nicht wirklich einen großen Nutzen für das VDoc Template Lager gesehen, vor allem für Klassenvariablen, die als gU oder PDOStatement Objekte verwendet werden werden.

Eine Lösung, die ich verwende, ist eigentlich, gehen Sie in Tools/Optionen/Editor/Code Vorlagen (mit PHP als Ihre Sprache ausgewählt), und fügen Sie eine neue Vorlage. Ich rief meinen Hinweis an. Dann unter Expanded Text, verwenden Sie die folgende Vorlage:

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

Hm, ich habe NB 8.0.2 und für mich ist es umgekehrt. Der/* @var $ Variablentyp */funktioniert einwandfrei. Ich habe versucht, deinen Patch für die Vorlagen zu verwenden. aber es hat nicht funktioniert. – userfuser

+0

Ich bin mir nicht sicher, was genau mit meiner Kopie von Netbeans los war, als ich das erste Mal answe gepostet habe, aber ich benutze jetzt 8.2. /* @var $ varName varType */ funktioniert gut. – Mike

5

Suchen Sie die lästigen Magie Variablen zu dokumentieren? (Ich habe, diese Frage zur Zeit Top-Ergebnis für das in Google Reihen Ich hoffe, das hilft jemand.!)

Die @property Tag ermöglicht Ihnen Magie PHP-Variablen zu dokumentieren - diejenigen implementiert __get() und __set() verwenden.Der Tag sollte sofort in der Dokumentation verwendet werden, vor der Klassendefinition:

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

Diese Notation löst die automatische Vervollständigung, getestet in Netbeans 8.1 und PhpStorm 2016,1.

enter image description here

1

Nach this bug report, die Syntax wird in NetBeans 9 ändern:

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

Außerdem ist es erwähnenswert, dass Sie [] auf einen Klassennamen anhängen kann ein Array von Objekten, um anzuzeigen:

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

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

Und vergessen Sie nicht Ihre use Aussage, z use Foo;