Wie gehe ich mit der Warnung "Methode nicht in Klasse gefunden" für magisch implementierte Methoden um?

Ich sitze auf einer großen Codebasis, die mehrere Klassen enthält, die Funktionalität durch magisch implementierte Methoden (mit__call und__callStatic). Zum Beispiel:

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

Das Problem ist, dass PhpStorm denkt, dass dietest() Methode ist nicht vorhanden, daher wird am Aufrufstandort eine Warnung ausgegeben. Dies ist ein wenig nervig, da der Code natürlich ausgeführt wird und sich wie erwartet verhält.

Ich habe den Schweregrad bereits herabgesetzt, indem ich die Option "Herabstufungsschweregrad, wenn __magische Methoden in der Klasse vorhanden sind" aktiviert habe, aber ich würde es vorziehen, entweder:

Deaktivieren Sie diese Funktion für bestimmte Klassen vollständignur, oderarbeite lieber mit der IDE als dagegen - versorge sie mit den Informationen, die ich bereits habe, damit unsere Ansichten übereinstimmen

Ist einer der oben genannten möglich? Wenn das so ist, wie?

Zusätzliche Bonusfrage: Betrachten Sie den Fall, in dem Methodenaufrufe verkettet werden.

$f = new Foo;
$f->test()->chain()->moreChain();   // potentially runs fine

Vorausgesetzt, dass der Zauberruf an$f->test() Gibt etwas Passendes zurück. Die nachfolgenden (möglicherweise, aber nicht unbedingt, auch magischen) Aufrufe funktionieren einwandfrei. Da es jedoch keine Möglichkeit gibt, weiß ich von der IDE was zu erzählentest() Gibt zurück, dass es den Rest der Aufrufkette als voll mit fehlenden Methoden kennzeichnet. Und um die Sache noch schlimmer zu machen, gilt die Einstellung "Herabstufungsschweregrad" nicht für diese Warnungen, da die IDE nicht weiß, welche Klasse diese Zwischenobjekte haben sollen.

Gibt es eine Lösung, die auch diesen Fall abdecken kann?

Aktualisieren

Auch wenn die magischen Methoden mit dokumentiert werden@method Anmerkungen scheinen zu funktionieren, ich muss davon ausgehen, dass es derzeit einige Probleme mit diesem Ansatz gibt, da ich nur ein wenig Arbeit benötigte, um auf diese verwandten Fehler zu stoßen:

Tipping für die Methodenargumente funktioniert mit Grundelementen nicht richtigAnmerkungen funktionieren für einen Anruf, nicht jedoch für verkettete Anrufe

Ich hoffe, dass sie sie in einem angemessenen Zeitrahmen reparieren.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage