После многих счастливых лет кодирования в блокноте ++ и возвышенном, мне посоветовали дать PHP IDE. Я пытаюсь phpStorm, и мне кажется, что это хорошо. Завершение и документация кода – отличная функция, но не работает для меня, когда используются магические методы. Есть ли работа, чтобы заставить phpStorm понять, что происходит в магических методах?
Наша ситуация примерно такая:
abstract class a { public static function __callStatic($method,$args) { if(strpos($method,"get_by_") === 0) { //do stuff } elseif(strpos($method,"get_first_by_") === 0) { //do stuff } elseif($method == "get_all") { //do stuff } } } class b extends a { // some more stuff } b::get_by_user_id(27); b::get_first_by_id(156); b::get_all();
Метод magic callStatic позволяет получить коллекцию объектов через 1 или более аргументов, которые составляют вызов функции.
Я вижу, что в этих случаях есть оператор @method, но phpStorm только подбирает первое из этих утверждений. Кроме того, я могу только установить тип возвращаемого значения в смешанный, где я бы предпочел, чтобы он мог установить его как любой класс, на который он был вызван (b в моем примере).
Благодарю вас за любые идеи или предложения.
Использовать комментарии 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 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
Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class
Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class
– это не поможет с завершением кода для таких методов каким-либо образом, но не будет отмечать эти магические методы как ошибки «неопределенного метода».
Билет phpDocumentor, касающийся использования RegEx / partial имен для тегов @property
/ @method
(как это может быть полезно для документации и того, как небольшая помощь может привести к фактической IDE при работе с завершением кода):
Отчасти связано с оригинальным вопросом:
Вы также можете определить это в метафайле 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 каждую возможность, когда происходит магия.
Имейте некоторые документы для деталей.