Como lidar com o aviso “método não encontrado na aula” para métodos implementados magicamente?
Estou sentado em uma grande base de código que contém várias classes que expõem a funcionalidade através de métodos implementados magicamente (usando__call
e__callStatic
). Por exemplo:
class Foo {
public function __call($name, $parameters) {
echo "You called $name().\n";
}
}
$f = new Foo;
$f->test(); // runs fine, but PhpStorm flags as a warning
O problema é que o PhpStorm acha que otest()
método não existe, por isso, dá um aviso no site de chamada. Isso é um pouco irritante, pois é claro que o código será executado e se comportará como esperado.
Eu já ajustei a gravidade, marcando a opção "downgrade severity if __magic methods is present in class", mas eu preferiria:
desabilitar completamente essa funcionalidade para classes específicassóoutrabalhar com o IDE e não contra ele - fornecer as informações que eu já tenho, então nossas visões concordamAlguma das alternativas acima é possível? Se sim, como?
Pergunta de bônus adicional: considere o caso em que as chamadas de método estão sendo encadeadas.
$f = new Foo;
$f->test()->chain()->moreChain(); // potentially runs fine
Assumindo que a magia chama$f->test()
retorna algo apropriado as chamadas subsequentes (possivelmente, mas não necessariamente, também mágicas) funcionarão bem. No entanto, desde que não há nenhuma maneira que eu conheço para dizer ao IDE o quetest()
A devolve sinaliza o restante da cadeia de chamadas como cheia de métodos ausentes também. E, para piorar a situação, a configuração "downgrade severity" não se aplica a esses avisos, pois o IDE não sabe qual classe esses objetos intermediários devem ser.
Existe uma solução que também pode cobrir este caso?
AtualizarMesmo documentando os métodos mágicos com@method
as anotações parecem funcionar, eu tenho que assumir que atualmente existem vários problemas com essa abordagem, porque só me levou um pouco de trabalho para encontrar esses erros relacionados:
Eu espero que eles consertem eles em um prazo razoável.