Sugerencias de tipo de variable en Netbeans (PHP)

85

Solo tengo curiosidad por saber si hay una forma en netbeans de dar pistas de tipo para variables regulares, de modo que intellisense lo capte. Sé que puede hacerlo para propiedades de clase, parámetros de función, tipos de retorno, etc. pero no puedo averiguar cómo hacerlo para 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).

ex algo como:

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

Cuando se usa $ someService después, netbeans proporcionaría todos los métodos disponibles definidos en la clase Some_Service.

rr.
fuente
1
Esto funciona dentro de una clase, para miembros, pero no sé cómo hacerlo en funciones o código de procedimiento.
David Snabel-Caunt
1
Pensaría en cambiar el nombre de esto a sugerencias de tipo variable en PHP IDE ya que este tipo de comentario debería funcionar en todos los IDE comunes (NEtBeans, Eclipse, ...)
shadyyx

Respuestas:

186

Una sola línea es todo lo que necesita:

/* @var $varName Type_Name */

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

Nota: al menos, en la versión 8.2; La clave parece ser:

  • El asterisco único (en /*lugar de /**).
  • Colocando el tipo después del nombre de la variable.
  • No tener nada antes y después de la sugerencia de tipo (excepto espacios en blanco, pero incluso eso no está permitido cuando el comentario no está en una sola línea).
johannes
fuente
16
La clave aquí parece ser el asterisco / * 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, $this->obj = $serviceLocator->get('obj');si lo uso /* @var $obj Obj */no funciona ...
shadyyx
2
@shadyyx En este caso deberías usar /** @var Type_Name */, ¿ves esta publicación ?
Apóstol
6
Recuerde que puede escribir vdocen la línea sobre la variable que va a documentar y luego presionar Taby eso actuará como una macro para crear automáticamente las publicaciones de @johannes del bloque de documentos de arriba.
Tom Auger
1
Si desea que NetBeans también admita sintaxis alternativas, comente / vote sobre la solicitud de función: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout
24

Sé que esta es una pregunta anterior, pero estaba buscando una respuesta similar para Eclipse / Zend Studio y esto también lo resolvió.

** Sin embargo, tenga en cuenta que debe estar en una sola línea con la apertura y el cierre explícitamente en este estilo ...

/* @var $varName Type_Name */

No hay otros formatos ya sea ...

/**
 * @var $varName Type_Name
 */ 

o...

// @var $varName Type_Name

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

oucil
fuente
Usar el método de doble barra que se enumera por última vez no funcionó para mí en NetBeans 7.2
David
1
@David Puede que no se lea tan bien, pero dije que SOLO el primero funciona. Aunque los otros dos son comentarios válidos, ninguno de ellos funciona con el sistema de sugerencias de tipos, al menos en lo que respecta a eclipse, no estoy seguro de NetBeans.
oucil
1
Netbeans (8.01) solo acepta la primera opción, usando / *, pero phpStorm (8) también admite / **.
Jop van Raaij
9

¿Está buscando documentar esas molestas variables mágicas ? (Lo hice; esta pregunta actualmente ocupa el primer lugar en Google. ¡Espero que esto ayude a alguien!)

La @propertyetiqueta le permite documentar variables php mágicas , aquellas implementadas usando __get()y __set(). La etiqueta debe usarse en la documentación inmediatamente anterior a la definición de la clase:

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

Esta notación activa el autocompletado, probado en Netbeans 8.1 y PhpStorm 2016.1.

ingrese la descripción de la imagen aquí

GHH
fuente
3

Según este informe de error , 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 agregar []al nombre de una 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 usedeclaración, por ejemplouse Foo;

rybo111
fuente
2

En netbeans 8.0.2, la plantilla vdoc le da esto:

/* @var $variable type */

Sin embargo, Netbeans no reconocerá esto y no le dará la lista de autocompletar correcta para sus objetos. En su lugar, use esto, justo antes de su declaración de variable:

/** @var objectType $varName */

Realmente no he visto un gran uso para la plantilla vdoc estándar , especialmente para las variables de clase que se utilizarán como objetos PDO o PDOStatement.

Una solución que utilizo es ir a Herramientas / Opciones / Editor / Plantillas de código (con PHP seleccionado como su idioma) y agregar una nueva plantilla. Llamé a mi pista . Luego, en Texto expandido, use la siguiente plantilla:

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */
Miguel
fuente
3
Hm, tengo NB 8.0.2 y para mí es al revés. El tipo de variable / * @var $ * / funciona bien. Intenté usar tu parche para las plantillas. pero no funcionó.
userfuser
1
No estoy seguro de qué estaba pasando exactamente con mi copia de netbeans cuando publiqué esta respuesta por primera vez, pero ahora estoy usando 8.2. / * @var $ varName varType * / funciona bien.
Mike
0

Para NetBeans IDE 8.2, la sintaxis es la siguiente:

class foobar{
    /** @var string $myvar: optional description here **/
    protected static $myvar;
}

Esto proporcionará las sugerencias de tipo correctamente para las variables estáticas al menos.

andreszs
fuente