Jak radzić sobie z ostrzeżeniem „nie znaleziono metody w klasie” dla magicznie zaimplementowanych metod?
Siedzę na dużej podstawie kodu, która zawiera kilka klas, które ujawniają funkcjonalność poprzez magicznie zaimplementowane metody (za pomocą__call
i__callStatic
). Na przykład:
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
Problem polega na tym, że PhpStorm uważa, żetest()
metoda nie istnieje, więc wyświetla ostrzeżenie na stronie wywołania. Jest to trochę denerwujące, ponieważ oczywiście kod będzie działał i zachowywał się zgodnie z oczekiwaniami.
Już zmniejszyłem istotność, sprawdzając „istotność downgrade, jeśli metody __magic są obecne w klasie”, ale wolę albo:
całkowicie wyłączyć tę funkcjonalność dla określonych klastylkolubpracuj z IDE, a nie przeciwko niemu - podaj informacje, które już mam, aby nasze poglądy się zgadzałyCzy jest to możliwe? Jeśli tak to jak?
Dodatkowe pytanie dodatkowe: rozważ przypadek, w którym wywołania metod są powiązane.
$f = new Foo;
$f->test()->chain()->moreChain(); // potentially runs fine
Zakładając, że magiczne wezwanie do$f->test()
zwraca coś odpowiedniego, kolejne wywołania (być może, ale niekoniecznie także magiczne) będą działać poprawnie. Ponieważ jednak nie wiem, co powiedzieć, IDEtest()
zwraca to oznacza, że reszta łańcucha połączeń jest pełna brakujących metod. Co gorsza, ustawienie „obniżenie ważności” nie ma zastosowania do tych ostrzeżeń, ponieważ IDE nie wie, jaką klasą mają być te obiekty pośrednie.
Czy istnieje rozwiązanie, które może również obejmować tę sprawę?
AktualizacjaNawet jeśli udokumentowałem magiczne metody@method
adnotacje wydają się działać, muszę założyć, że obecnie istnieje kilka problemów z tym podejściem, ponieważ zajęło mi tylko trochę pracy, aby przyjrzeć się tym pokrewnym błędom:
Mam nadzieję, że naprawią je w rozsądnych ramach czasowych.