Como documentar methods mágicos (_call e _callStatic) para IDEs

Depois de muitos anos felizes codificando no bloco de notas ++ e sublime, fui aconselhado a dar um IDE do PHP. Estou tentando phpStorm e parece legal. A conclusão e a documentação do código são uma ótima característica, mas não estão funcionando para mim quando os methods mágicos são usados. Existe algum trabalho para obter o phpStorm para entender o que está acontecendo nos methods mágicos?

Nossa situação é algo assim:

abstract class a { public static function __callStatic($method,$args) { if(strpos($method,"get_by_") === 0) { //do stuff } elseif(strpos($method,"get_first_by_") === 0) { //do stuff } elseif($method == "get_all") { //do stuff } } } class b extends a { // some more stuff } b::get_by_user_id(27); b::get_first_by_id(156); b::get_all(); 

O método CallStatic mágico nos permite obter uma coleção de objects através de 1 ou mais argumentos que compõem a chamada de function.

Eu vejo que há uma afirmação @method para uso nesses casos, mas phpStorm está apenas adotando a primeira dessas declarações. Além disso, eu só posso definir o tipo de retorno para misturado onde, como preferiria ser configurá-lo como qualquer class, isso foi chamado (b no meu exemplo).

Qualquer idéia ou sugestão será muito bem recebida, obrigado.

Use um comentário PHPDoc em nível de class – especificamente @ etiqueta de método – funciona bem em PhpStorm:

 /** * @method static someClass get_by_user_id(int $id) Bla-bla * @method static someClass get_first_by_id(int $id) */ abstract class a { ... 

No acima:

  • @method – tag PHPDoc
  • static – diz que este é um método estático
  • someClass ou $this – tipo de retorno
  • get_by_user_id – nome do método
  • (int $id) – assinatura do método: ([[type] [parameter]<, ...>])
  • Bla-bla – alguma descrição opcional

Mais sobre @method :

PS Enquanto a @method static funciona bem no PhpStorm (diz ao IDE que esse método é estático), pode não ser (ainda?) Suportado pela ferramenta phpDocumentor atual (desculpe, não usei por um tempo).


Alternativamente : (em PhpStorm, é claro) Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class – não ajudará com a conclusão do código para tais methods de qualquer forma, mas não marcará esses methods mágicos como erros do “método indefinido”.


Bilhete do phpDocumentor sobre o uso de RegEx / nomes parciais para tags @method / @method (como isso pode ser útil para a documentação e quanto pouca ajuda pode trazer ao IDE real quando se trata da conclusão do código):

Um pouco relacionado à pergunta original:

Você também pode definir isso no arquivo meta do phpstorm. Aqui está um exemplo para o método de fábrica (v2016.3):

 // Define in .phpstorm.meta.php namespace PHPSTORM_META { $STATIC_METHOD_TYPES = [ \Factory::create('') => [], ]; } // Then use in code $factory = new \Factory(); $user = $factory->create(\User::class); // Here you get autocomplete. $user->subscribe(); 

Desta forma, você não precisa documentar todas as possibilidades quando a magia acontece.

Tenha alguns documentos para obter detalhes.

    Intereting Posts