Как бороться с предупреждением «метод не найден в классе» для магически реализованных методов?
Я сижу на большой кодовой базе, которая содержит несколько классов, которые предоставляют функциональность с помощью магически реализованных методов (используя__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 agreeIs 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
аннотации, кажется, работают, я должен предположить, что в настоящее время есть несколько проблем с этим подходом, потому что мне потребовалась небольшая работа, чтобы обнаружить эти связанные ошибки:
Я надеюсь, что они исправят их в разумные сроки.