У меня есть класс, называемый Resource
, но с полным именем, как com.example/objects/Resource
PHPDoc типа намекая перекрывающихся типа
Если я пишу файл
use com.example/objects/Resource;
/**
* Do something
*
* @param Resource $r
*/
function myfunc(Resource $r) {
$r->something();
}
$x = new Resource();
myfunc($x);
Тогда все работает нормально. Из-за моей use
заявлении PHP typehinting способен справиться с тем, что я прошел переменную типа com.example/objects/Resource
, хотя MyFunc только по сравнению с Resource
Проблема заключается в том, что PhpStorm не в состоянии справиться с этим. Я не могу использовать автозаполнение, и я получаю предупреждение на myfunc($x)
, в котором говорится: Expected Resource, got Resource
и предупреждение в функции, которая говорит Method 'something' not found in the class Resource
. Очевидно, что PHPStorm предполагает, что я использую встроенный класс resource
, а не мой собственный класс Resource
.
Если я изменил PHPDoc и определение функции для использования полного имени, то предыдущие предупреждения исчезнут, но я получаю небольшое предупреждение, которое говорит Unnecessary fully qualified name.
. Я полагаю, что одним из решений было бы использовать полное имя и отключить незначительное предупреждение, но я бы предпочел не использовать полнофункциональные имена во всем мире. Я знаю, что это моя собственная ошибка для создания класса с таким же именем, как встроенный тип, но мне интересно, есть ли способ сделать эту работу? Помимо переименования моего класса Resource
?
Используйте псевдоним. например 'use com.example/objects/Resource as MyResource;' – LazyOne
использовать "\" вместо "/" в пространствах имен ^^. –