2009-11-25 11 views
73

Simplemente curioso si hay una forma en netbeans de dar pistas de tipo para las variables regulares, de modo que intellisense lo recoja. Sé que puedes hacerlo para las propiedades de clase, los parámetros de función, los tipos de devolución, etc. pero no puedo entender cómo hacerlo para las variables regulares. Es algo que realmente ayudaría en situaciones en las que tiene un método que puede devolver diferentes tipos de objetos (como un localizador de servicios).Sugerencia de tipo de variable en Netbeans (PHP)

ex algo como:

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

donde el uso de $ someService después, netbeans proporcionarían todos los métodos disponibles definidas en el Some_Service clase.

+1

Esto funciona dentro de una clase, para miembros, pero no sé cómo hacerlo en funciones o código de procedimiento. –

+1

Pensaría en cambiarle el nombre a * Sugerencia de tipo de variable en PHP IDEs *, ya que este tipo de comentario debería funcionar en todos los IDE comunes (NEtBeans, Eclipse, ...). – shadyyx

Respuesta

158

Una sola línea es todo lo que necesita:

/* @var $varName Type_Name */ 

ver este artículo en el Blog de NetBeans PHP: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

+0

Funciona como un encanto, gracias por el enlace. –

+10

La clave aquí parece ser el asterisco simple/* en lugar de/**. Al menos, en la versión 8.0. Gracias. – Cypher

+1

Parece que no funciona en absoluto si necesitamos usar vdoc para la propiedad del objeto, es decir, para '$ this-> obj = $ serviceLocator-> get ('obj');' si uso '/ * @var $ obj Obj */'no funciona ... – shadyyx

21

Sé que esto es una cuestión más viejo, pero yo estaba buscando una respuesta similar para Eclipse/Zend Studio y esto lo resolvió también.

** Nota sin embargo que debe estar en una sola línea con la apertura y cierre de forma explícita en este estilo ...

/* @var $varName Type_Name */ 

No hay otros formatos si ...

/** 
* @var $varName Type_Name 
*/ 

o ...

// @var $varName Type_Name 

parecía funcionar en absoluto. Espero que ayude a alguien.

+0

Usando el método de doble barra enumerada las No funcionó para mí en NetBeans 7.2 – David

+1

@David Puede que no lo lea bien, pero sí dije que SOLO los primeros funcionan. Aunque los otros son comentarios válidos, ninguno de ellos funciona con el sistema de sugerencias tipográficas, al menos en lo que respecta al eclipse, no está seguro acerca de NetBeans. – oucil

+0

Lo siento, leí mal su respuesta. Mi culpa. – David

2

en NetBeans 8.0.2, la vdoc plantilla le da esto:

/* @var $variable type */ 

Netbeans no reconocerá esto, sin embargo, y no le dará la lista de autocompletar correcto para sus objetos. En su lugar utilice este, justo antes de su declaración de variables:

/** @var objectType $varName */ 

realmente no he visto una gran utilidad para la plantilla de la vdoc, especialmente para las variables de clase que van a ser utilizados como DOP o PDOStatement objetos.

Una solución que uso es realmente ir a Herramientas/Opciones/Editor/Plantillas de Código (con PHP seleccionado como su Idioma), y agregar una nueva Plantilla. Llamé a la mía pista. A continuación, en texto ampliado, utilice la siguiente plantilla:

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

Hm, tengo NB 8.0.2 y para mí es al revés. La variable/* @var $ tipo */funciona bien. Intenté usar tu parche para las plantillas. pero no funcionó. – userfuser

+0

No estoy seguro de qué estaba pasando exactamente con mi copia de netbeans cuando publiqué esta respuesta por primera vez, pero ahora uso 8.2. /* @var $ varName varType */ funciona bien. – Mike

5

¿Desea para documentar esos molestos mágicos variables? (Lo hice, y esta cuestión ocupa actualmente la parte superior para que el resultado en Google espero que esto ayude a alguien.!)

La etiqueta @property le permite documentar mágicos variables de PHP - los llevados a cabo usando __get() y __set().La etiqueta se debe utilizar en la documentación que precede inmediatamente a la definición de clase:

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

Esta notación desencadena autocompletar, probado en Netbeans 8.1 y PhpStorm 2016,1.

enter image description here

1

Según this bug report, la sintaxis cambiará en NetBeans 9:

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

Además, vale la pena mencionar que puede anexar [] a un nombre de clase para indicar una matriz de objetos:

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

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

Y no olvide su declaración use, por ejemplo use Foo;

Cuestiones relacionadas