Hinweise auf Variablentypen in Netbeans (PHP)


82

Nur neugierig, ob es in Netbeans eine Möglichkeit gibt, Typhinweise für reguläre Variablen zu geben, damit Intellisense sie aufgreift. Ich weiß, dass Sie dies für Klasseneigenschaften, Funktionsparameter, Rückgabetypen usw. tun können, aber ich kann nicht herausfinden, wie es für reguläre Variablen gemacht wird. Dies ist sehr hilfreich in Situationen, in denen Sie eine Methode haben, die verschiedene Objekttypen zurückgeben kann (z. B. einen Service Locator).

ex so etwas wie:

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

Bei späterer Verwendung von $ someService stellen netbeans alle verfügbaren Methoden bereit, die in der Klasse Some_Service definiert sind.


1
Dies funktioniert innerhalb einer Klasse für Mitglieder, aber ich weiß nicht, wie es in Funktionen oder prozeduralem Code gemacht werden soll.
David Snabel-Caunt

1
Ich würde darüber nachdenken, dies in Hinweise auf Variablentypen in PHP-IDEs umzubenennen, da diese Art von Kommentaren in allen gängigen IDEs (NEtBeans, Eclipse, ...) funktionieren sollte.
Shadyyx

Antworten:


183

Eine einzige Zeile ist alles, was Sie brauchen:

/* @var $varName Type_Name */

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

Hinweis: Zumindest in Version 8.2; Der Schlüssel scheint zu sein:

  • Das einzelne Sternchen ( /*anstelle von /**).
  • Platzieren des Typs nach dem Variablennamen.
  • Vor und nach dem Typ-Hinweis nichts zu haben (außer Leerzeichen, aber selbst das ist nicht zulässig, wenn der Kommentar nicht in einer einzelnen Zeile steht).

16
Der Schlüssel hier scheint das einzelne Sternchen / * anstelle von / ** zu sein. Zumindest in Version 8.0. Vielen Dank.
Cypher

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

2
@shadyyx In diesem Fall sollten Sie verwenden /** @var Type_Name */, siehe diesen Beitrag ?
Apostel

6
Denken Sie daran, dass Sie vdocin die Zeile über der Variablen, die Sie dokumentieren Tabmöchten, eingeben und dann drücken können. Dies fungiert als Makro, um automatisch den Dokumentblock @johannes Beiträge oben zu erstellen.
Tom Auger

1
Wenn Sie möchten, dass NetBeans auch alternative Syntaxen unterstützt, kommentieren / stimmen Sie die Funktionsanforderung ab: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

23

Ich weiß, dass dies eine ältere Frage ist, aber ich habe nach einer ähnlichen Antwort für Eclipse / Zend Studio gesucht und diese auch gelöst.

** Beachten Sie jedoch, dass es sich um eine einzelne Zeile handeln muss, wobei das Öffnen und Schließen in diesem Stil explizit erfolgt ...

/* @var $varName Type_Name */

Keine anderen Formate ob ...

/**
 * @var $varName Type_Name
 */ 

oder...

// @var $varName Type_Name

schien überhaupt zu funktionieren. Hoffe das hilft jemandem.


Die Verwendung der zuletzt aufgeführten Doppel-Schrägstrich-Methode funktionierte bei NetBeans 7.2
David

1
@ David Es mag nicht so gut lesen, aber ich habe gesagt, dass NUR das erste funktioniert. Obwohl beide anderen gültige Kommentare sind, funktioniert keiner von ihnen mit dem Typ-Hinweissystem, zumindest was Eclipse betrifft, nicht sicher über NetBeans.
Oucil

1
Netbeans (8.01) akzeptiert nur die erste Option mit / *, aber phpStorm (8) unterstützt auch / **.
Jop van Raaij

8

Möchten Sie diese lästigen magischen Variablen dokumentieren ? (Ich habe es getan; Diese Frage ist derzeit das beste Ergebnis in Google. Ich hoffe, das hilft jemandem!)

Mit dem @propertyTag können Sie magische PHP-Variablen dokumentieren - solche, die mit __get()und implementiert wurden __set(). Das Tag sollte in der Dokumentation unmittelbar vor der Klassendefinition verwendet werden:

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

Diese Notation löst die automatische Vervollständigung aus, die in Netbeans 8.1 und PhpStorm 2016.1 getestet wurde.

Geben Sie hier die Bildbeschreibung ein


3

Laut diesem Fehlerbericht ändert sich die Syntax in NetBeans 9 :

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

Erwähnenswert ist auch, dass Sie []einen Klassennamen anhängen können , um ein Array von Objekten anzugeben:

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

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

Und vergessen Sie nicht Ihre useAussage, zuse Foo;


2

In Netbeans 8.0.2 bietet Ihnen die vdoc- Vorlage Folgendes :

/* @var $variable type */

Netbeans erkennt dies jedoch nicht und gibt Ihnen nicht die richtige Autovervollständigungsliste für Ihre Objekte. Verwenden Sie dies stattdessen kurz vor Ihrer Variablendeklaration:

/** @var objectType $varName */

Ich habe keine wirklich gute Verwendung für die Standard-VDOC- Vorlage gesehen, insbesondere für Klassenvariablen, die als PDO- oder PDOStatement-Objekte verwendet werden sollen.

Eine Lösung, die ich verwende, besteht darin, in Tools / Optionen / Editor / Code-Vorlagen (mit PHP als Sprache ausgewählt) zu gehen und eine neue Vorlage hinzuzufügen. Ich nannte meinen Hinweis . Verwenden Sie dann unter Erweiterter Text die folgende Vorlage:

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

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

1
Ich bin mir nicht sicher, was genau mit meiner Kopie von Netbeans los war, als ich diese Antwort zum ersten Mal gepostet habe, aber ich verwende jetzt 8.2. / * @var $ varName varType * / funktioniert einwandfrei.
Mike
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.