89 votes

Indication du type de variable dans Netbeans (PHP)

Je suis juste curieux de savoir s'il y a un moyen dans Netbeans de donner des indications de type pour les variables régulières, afin qu'intellisense les détecte. Je sais que vous pouvez le faire pour les propriétés de classe, les paramètres de fonction, les types de retour, etc. mais je n'arrive pas à trouver comment le faire pour les variables ordinaires. C'est quelque chose qui serait vraiment utile dans les situations où vous avez une méthode qui peut retourner différents types d'objets (comme un localisateur de service).

ex quelque chose comme :

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

Lorsque l'on utilise ensuite $someService, netbeans fournit toutes les méthodes disponibles définies dans la classe Some_Service.

1 votes

Cela fonctionne dans une classe, pour les membres, mais je ne sais pas comment le faire dans les fonctions ou le code procédural.

1 votes

Je penserais à le renommer en Indication du type de variable dans les IDE PHP car ce type de commentaire devrait fonctionner dans tous les IDE courants (NEtBeans, Eclipse, ...).

189voto

johannes Points 8057

Une seule ligne suffit :

/* @var $varName Type_Name */

Voir cet article dans le NetBeans PHP Blog : https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

Note : Au moins, dans la version 8.2 ; La clé semble être :

  • L'astérisque simple ( /* au lieu de /** ).
  • Placer le type après le nom de la variable.
  • Ne rien avoir avant et après l'indication de type (sauf les espaces blancs, mais même cela n'est pas autorisé lorsque le commentaire n'est pas sur une seule ligne).

17 votes

La clé ici semble être l'astérisque simple /* au lieu de /**. Du moins, dans la version 8.0. Merci.

1 votes

Il semble que cela ne fonctionne pas du tout si nous avons besoin d'utiliser vdoc pour la propriété d'un objet, c'est-à-dire pour $this->obj = $serviceLocator->get('obj'); si j'utilise /* @var $obj Obj */ ça ne marche pas...

2 votes

@shadyyx Dans ce cas, vous devez utiliser /** @var Type_Name */ voir ceci poste ?

24voto

oucil Points 458

Je sais que c'est une vieille question, mais je cherchais une réponse similaire pour Eclipse/Zend Studio et ceci l'a également résolu.

**Notez cependant qu'il doit être sur une seule ligne avec l'ouverture et la fermeture explicitement dans ce style...

/* @var $varName Type_Name */

Aucun autre format, que ce soit...

/**
 * @var $varName Type_Name
 */ 

ou...

// @var $varName Type_Name

a semblé fonctionner du tout. J'espère que cela aidera quelqu'un.

0 votes

L'utilisation de la dernière méthode à double barre oblique n'a pas fonctionné pour moi dans NetBeans 7.2.

1 votes

David Il se peut que je ne me lise pas aussi bien, mais j'ai dit que SEULEMENT la première fonctionne. Bien que les deux autres commentaires soient valables, aucun d'entre eux ne fonctionne avec le système d'indication de type, du moins en ce qui concerne Eclipse, mais je ne suis pas sûr pour NetBeans.

1 votes

Netbeans (8.01) n'accepte que la première option, en utilisant /*, mais phpStorm (8) supporte également /**.

10voto

GHH Points 606

Vous cherchez à documenter ces ennuyeux magie (Je l'ai fait ; cette question est actuellement classée en tête de liste des résultats de Google. J'espère que cela aidera quelqu'un)

El @property vous permet de documenter magie les variables php - celles mises en œuvre à l'aide de __get() y __set() . La balise doit être utilisée dans la documentation précédant immédiatement la définition de la classe :

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

Cette notation déclenche l'autocomplétion, testée dans Netbeans 8.1 et PhpStorm 2016.1.

enter image description here

4voto

rybo111 Points 1318

Según ce rapport de bogue la syntaxe sera modifiée en NetBeans 9 :

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

En outre, il convient de mentionner que vous pouvez ajouter [] à un nom de classe pour indiquer un tableau d'objets :

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

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

Et n'oubliez pas votre use déclaration, par exemple use Foo;

1 votes

Voilà pourquoi. Merci, cela a fonctionné pour moi.

2voto

Mike Points 58

Dans netbeans 8.0.2, l'option vdoc Le modèle vous donne ceci :

/* @var $variable type */

Cependant, Netbeans ne le reconnaîtra pas et ne vous donnera pas la liste autocomplète correcte pour vos objets. Utilisez plutôt ceci, juste avant votre déclaration de variable :

/** @var objectType $varName */

Je n'ai pas vraiment vu une grande utilisation de l'action. vdoc Template, en particulier pour les variables de classe qui vont être utilisées comme objets PDO ou PDOStatement.

Une solution que j'utilise consiste en fait à aller dans Outils / Options / Éditeur / Modèles de code (avec PHP sélectionné comme langue), et d'ajouter un nouveau modèle. J'ai appelé le mien indice . Puis, sous Texte développé, utilisez le modèle suivant :

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

3 votes

Hm, j'ai NB 8.0.2 et pour moi c'est l'inverse. Le /* @var $variable type */ fonctionne bien. J'ai essayé d'utiliser votre patch pour les modèles, mais cela n'a pas fonctionné.

1 votes

Je ne sais pas exactement ce qui se passait avec ma copie de Netbeans lorsque j'ai posté cette réponse, mais j'utilise maintenant la version 8.2. /* @var $varName varType */ fonctionne parfaitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X