Как бороться с предупреждением «метод не найден в классе» для магически реализованных методов?

Я сижу на большой кодовой базе, которая содержит несколько классов, которые предоставляют функциональность с помощью магически реализованных методов (используя__call а также__callStatic). Например:

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

Проблема в том, что PhpStorm считает, чтоtest() Метод не существует, поэтому он выдает предупреждение на сайте вызова. Это немного раздражает, так как, конечно, код будет работать и вести себя как положено.

Я уже настроил серьезность, проверив & quot; серьезность понижения, если в классе присутствуют __magic методы & quot; вариант, но я бы предпочел либо:

completely disable this functionality for specific classes only, or work with the IDE rather than against it -- provide it with the information I already have so our views agree

Is any of the above possible? If so, how?

Дополнительный бонусный вопрос: рассмотрим случай, когда вызовы методов связаны друг с другом.

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

Предполагая, что волшебный вызов$f->test() возвращает что-то соответствующее, последующие (возможно, но не обязательно, также магические) вызовы будут работать нормально. Тем не менее, поскольку я не знаю, как сообщить IDE, чтоtest() возвращает его, помечает остальную часть цепочки вызовов как заполненную отсутствующими методами. И что еще хуже, «серьезность понижения» Параметр не применяется к этим предупреждениям, поскольку среда IDE не знает, к какому классу должны относиться эти промежуточные объекты.

Is there a solution that can also cover this case?

Update

Хотя документирование магических методов@method аннотации, кажется, работают, я должен предположить, что в настоящее время есть несколько проблем с этим подходом, потому что мне потребовалась небольшая работа, чтобы обнаружить эти связанные ошибки:

Type hinting for the method arguments does not work correctly with primitives Annotations work for one call, but not for chained calls

Я надеюсь, что они исправят их в разумные сроки.

Ответы на вопрос(4)

Ваш ответ на вопрос