PhpStorm не может найти объявление, чтобы пойти с магическим методом [duplicate]

неа. Причина, по которой ActiveX может это сделать, заключается в том, что ActiveX - небольшое приложение, которое выполняется на машине клиента.

Я бы предположил, что доступ к такой информации через JavaScript будет уязвимостью безопасности.

60
задан Rob Forrest 26 March 2013 в 11:54
поделиться

2 ответа

Использовать комментарии PHPDoc на уровне класса - особенно тег @method - отлично работает в PhpStorm:

/**
 * @method static someClass get_by_user_id(int $id) Bla-bla
 * @method static someClass get_first_by_id(int $id) 
 */
abstract class a {
...

В приведенном выше:

  • @method - - PHPDoc tag
  • static - указывает, что это статический метод
  • someClass или $this - тип возврата
  • get_by_user_id - - имя метода
  • (int $id) - подпись метода: ([[type] [parameter]<, ...>])
  • Bla-bla - некоторое необязательное описание

Подробнее о @method:

PS В то время как @method static отлично работает в PhpStorm (сообщает IDE, что метод статичен), он может не быть (пока?), Поддерживаемый фактическим инструментом phpDocumentor (извините, не использовал его некоторое время).


В качестве альтернативы: (в PhpStorm, конечно) Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class - это не поможет с завершением кода для таких методов каким-либо образом, но не будет отмечать эти магические методы как ошибки «неопределенного метода».


билет phpDocumentor относительно использования регистровых / неполных имен для тегов @property / @method (как это может быть полезно для документации и того, как небольшая помощь может привести к фактической IDE при работе с завершением кода):

112
ответ дан vp_arth 20 August 2018 в 14:53
поделиться
  • 1
    – Rob Forrest 26 March 2013 в 12:57
  • 2
    Нет. Все магические методы должны быть объявлены специально (это основной момент для документирования этого пути). PHPDoc не понимает частичные имена (например, get_by_*(int $id)). Для IDE (проверка кода, а не завершение!) У вас есть решение alt (отключить предупреждения). Для phpDocumentor (или альтернативного инструмента) - мне неизвестно решение (возможно, оно есть, но я не знаю об этом). У вас есть ссылка на github - файл нового билета и попросите добавить такие «частные имена», соответствующая функциональность - посмотрите, что они скажут (скорее всего, будут отклонены). Если он будет реализован, тогда IDE может иметь его также позже. – LazyOne 26 March 2013 в 13:30
  • 3
    github.com/phpDocumentor/phpDocumentor2/issues - но, пожалуйста, проверьте, не существует ли подобного билета перед отправкой. – LazyOne 26 March 2013 в 13:32
  • 4
    Спасибо за все это. В настоящее время есть открытый билет, но все это, похоже, успокоилось. Я оставил там комментарий, и мы посмотрим, что из этого получится. – Rob Forrest 26 March 2013 в 13:58
  • 5
    Только для справки, билет phpDocumentor (так что другие пользователи знают, о каком билете вы говорите, также добавили его в ответ): github.com/phpDocumentor/phpDocumentor2/issues/689 – LazyOne 26 March 2013 в 14:14

Отчасти связано с оригинальным вопросом:

Вы также можете определить это в метафайле phpstorm. Вот пример заводского метода (v2016.3):

// Define in .phpstorm.meta.php
namespace PHPSTORM_META {
    $STATIC_METHOD_TYPES = [
        \Factory::create('') => [],
    ];
}

// Then use in code
$factory = new \Factory();
$user = $factory->create(\User::class);
// Here you get autocomplete.
$user->subscribe();

Таким образом, вам не нужно docblock каждую возможность, когда происходит магия.

У некоторых документов для деталей.

4
ответ дан Yauheni Prakopchyk 20 August 2018 в 14:53
поделиться
  • 1
    Это не работает с __call. Это также не документированный и недействительный PHP. PHPStorm предоставляет поддержку только там, где у вас есть статически определенные методы, которые возвращают смесь типов в зависимости от ввода. – jgmjgm 7 February 2018 в 12:48
Другие вопросы по тегам:

Похожие вопросы: