Sugestão de tipo de variável no Netbeans (PHP)


86

Só estou curioso para saber se existe uma maneira no netbeans de dar dicas de tipo para variáveis ​​regulares, para que o intellisense as pegue. Eu sei que você pode fazer isso para propriedades de classe, parâmetros de função, tipos de retorno, etc., mas não consigo descobrir como fazer isso para variáveis ​​regulares. É algo que realmente ajudaria em situações onde você tem um método que pode retornar diferentes tipos de objetos (como um localizador de serviço).

ex algo como:

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

Quando usar $ someService posteriormente, o netbeans fornecerá todos os métodos disponíveis definidos na classe Some_Service.


1
Isso funciona dentro de uma classe, para membros, mas não sei como fazer em funções ou código procedural.
David Snabel-Caunt

1
Eu pensaria em renomear isso para sugestão de tipo de variável em IDEs PHP, pois esse tipo de comentário deve funcionar em todos os IDEs comuns (NEtBeans, Eclipse, ...).
shadyyx

Respostas:


187

Uma única linha é tudo que você precisa:

/* @var $varName Type_Name */

Consulte este artigo no blog do NetBeans PHP: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

Nota: pelo menos, na versão 8.2; A chave parece ser:

  • O asterisco único (em /*vez de /**).
  • Colocando o tipo após o nome da variável.
  • Não tendo nada antes e depois da dica de tipo (exceto espaço em branco, mas mesmo isso não é permitido quando o comentário não está em uma única linha).

17
A chave aqui parece ser o asterisco único / * em vez de / **. Pelo menos na versão 8.0. Obrigado.
Cypher

1
Parece não funcionar se precisarmos usar o vdoc para a propriedade do objeto, ou seja, $this->obj = $serviceLocator->get('obj');se eu usar, /* @var $obj Obj */ele não funciona ...
shadyyx

2
@shadyyx Nesse caso você deve usar /** @var Type_Name */, veja este post ?
Apóstolo

6
Lembre-se de que você pode digitar vdocna linha acima a variável que vai documentar e clicar em Tabe isso funcionará como uma macro para criar automaticamente o bloco de documentos @johannes posts acima.
Tom Auger

1
Se você deseja que o NetBeans suporte sintaxes alternativas também, comente / vote na solicitação de recurso: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

Eu sei que esta é uma questão mais antiga, mas eu estava procurando uma resposta semelhante para Eclipse / Zend Studio e isso também resolveu.

** Observe, porém, que deve estar em uma única linha com a abertura e o fechamento explicitamente neste estilo ...

/* @var $varName Type_Name */

Nenhum outro formato se ...

/**
 * @var $varName Type_Name
 */ 

ou...

// @var $varName Type_Name

parecia funcionar em tudo. Espero que ajude alguém.


Usar o método de barra dupla listado por último não funcionou para mim no NetBeans 7.2
David

1
@David Pode não ler muito bem, mas eu disse que SÓ o primeiro funciona. Embora ambos os outros sejam comentários válidos, nenhum deles funciona com o sistema de sugestão de tipo, pelo menos no que diz respeito ao eclipse, não tenho certeza sobre o NetBeans.
oucil

1
Netbeans (8.01) só aceita a primeira opção, usando / *, mas phpStorm (8) suporta / ** também.
Jop van Raaij

9

Você está procurando documentar essas variáveis mágicas incômodas ? (Sim; esta questão atualmente classifica o resultado principal para isso no Google. Espero que isso ajude alguém!)

A @propertytag permite que você documente variáveis ​​php mágicas - aquelas implementadas usando __get()e __set(). A tag deve ser usada na documentação imediatamente anterior à definição da classe:

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

Esta notação aciona o autocomplete, testado no Netbeans 8.1 e PhpStorm 2016.1.

insira a descrição da imagem aqui


3

De acordo com este relatório de bug , a sintaxe mudará no NetBeans 9 :

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

Além disso, vale a pena mencionar que você pode anexar []a um nome de classe para indicar uma matriz de objetos:

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

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

E não se esqueça de sua usedeclaração, por exemplouse Foo;


2

No netbeans 8.0.2, o modelo vdoc oferece isso:

/* @var $variable type */

O Netbeans não reconhecerá isso, entretanto, e não fornecerá a lista de preenchimento automático correta para seus objetos. Em vez disso, use isso, logo antes de sua declaração de variável:

/** @var objectType $varName */

Eu realmente não vi um grande uso para o modelo vdoc de estoque , especialmente para variáveis ​​de classe que serão usadas como objetos PDO ou PDOStatement.

Uma solução que uso é ir em Ferramentas / Opções / Editor / Modelos de código (com PHP selecionado como sua linguagem) e adicionar um novo modelo. Eu chamei minha dica . Em seguida, em Texto Expandido, use o seguinte modelo:

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

3
Hm, eu tenho o NB 8.0.2 e para mim é o contrário. O tipo de variável / * @var $ * / funciona bem. Eu tentei usar seu patch para os Templates. mas não funcionou.
userfuser

1
Não sei exatamente o que estava acontecendo com minha cópia do netbeans quando postei esta resposta pela primeira vez, mas estou usando o 8.2 agora. / * @var $ varName varType * / funciona perfeitamente.
Mike

0

Para o NetBeans IDE 8.2, a sintaxe é assim:

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

Isso fornecerá as dicas de tipo adequadamente para variáveis ​​estáticas, pelo menos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.