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ły

Czy 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ę?

Aktualizacja

Nawet 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:

Podpowiedź typu dla argumentów metody nie działa poprawnie z prymitywamiAdnotacje działają dla jednego połączenia, ale nie dla połączeń połączonych

Mam nadzieję, że naprawią je w rozsądnych ramach czasowych.

questionAnswers(4)

yourAnswerToTheQuestion