company_banner

PhpStorm 2019.3: поддержка PHP 7.4, PSR-12, WSL, MongoDB и многое другое



    Всем привет! Мы рады представить вам третий мажорный релиз PhpStorm в этом году!
    Под катом — подробный разбор всех заметных изменений и новых возможностей. Осторожно — очень много картинок.

    Скачать новую версию можно на сайте или с помощью Toolbox App. Как всегда, доступна 30-дневная пробная версия. Полную же версию могут использовать обладатели действующей подписки на PhpStorm или All Products pack, а также бесплатно — студенты и разработчики проектов с открытым исходным кодом.


    Производительность и качество


    В каждом релизе мы уделяем немало внимания улучшению производительности. Но в этот раз мы пошли еще дальше и устроили целый трехмесячный марафон по качеству, во время которого вся команда платформы IntelliJ была сосредоточена на шлифовке IDE с разных сторон. И вот чего удалось достичь:

    • IDE запускается быстрее
    • UI стал отзывчивее
    • Снизилось потребление памяти

    Мы не планируем останавливаться на достигнутом и продолжим работу над уменьшением времени запуска и другими оптимизациями в следующих релизах.

    PHP 7.4


    PHP 7.4 уже вышел! И в нем очень много крутых фич. Мы начали выкатывать поддержку PHP 7.4 в предыдущем релизе, а в PhpStorm 2019.3 полностью поддерживаются все новые возможности языка.

    Типизированные свойства


    Это, пожалуй, самая ожидаемая фича PHP 7.4, и PhpStorm поддерживает ее начиная с версии 2019.2. Но давайте посмотрим еще разок, потому что мы поправили мелкие проблемы и покрыли некоторые пограничные случаи.
    Конечно же, подсвечиваются все неправильные использования и несоответствия типов:



    Вероятно, вы захотите добавить декларации типов к свойствам классов в ваших проектах. В PhpStorm это делается быстро, потому что он умеет определять тип существующих полей на основе информации в PHPDoc, дефолтного значения или тайпхинта аргумента (если вы инжектили свойство через конструктор и указали его).

    В любом случае, нажмите Alt+Enter на свойстве, у которого нет типа, и в выпавшем списке выберите Add declared type for the field.



    Стрелочные функции


    Если у вас есть анонимные функции с однострочным телом, то в PHP 7.4 вы можете использовать для них синтаксис коротких лямбд: fn(parameter_list) => expr



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



    Нажмите Alt+Enter на анонимной функции и выберите пункт Convert closure to arrow function, чтобы сконвертировать функцию автоматически:



    Разделитель для числовых литералов


    В PHP 7.4 можно вставлять символ подчеркивания в любом месте числа, чтобы визуально его отформатировать и улучшить читаемость кода.
    Нажмите Alt+Enter на любом числе и примените Add number separators. Это автоматически добавит символ ‘_‘ после каждого третьего знака в десятичных числах, или после каждого четвертого знака в шестнадцатеричных, двоичных и восьмеричных.



    Вложенные тернарные операторы


    Почти во всех языках программирования тернарный оператор считается справа налево. В PHP все было наоборот, что весьма неинтуитивно и могло приводить к ошибкам. В PHP 7.4 левая ассоциативность тернарного оператора больше не поддерживается. Это значит, что либо вы не используете вложенные тернарные выражения вообще, либо используете, но явно указываете порядок выполнения с помощью скобок.
    PhpStorm 2019.3 подсветит устаревшее выражение, а вы можете уточнить, что имелось в виду, с помощью быстрого исправления ( Alt+Enter – ну, вы уже в курсе, да?).


    Новый механизм сериализации


    Проблемы интерфейса Serializable в PHP исправить не представлялось возможным, поэтому было решено добавить два новых магических метода __serialize() и __unserialize(). PhpStorm поможет найти их использования в коде:



    Ковариантные возвращаемые значения и контравариантные параметры


    PHP 7.4 исправляет множество несоответствий, в частности, теперь позволяет «сужать» тип возвращаемого значения в наследниках и «расширять» тип параметров.



    Устаревшие возможности


    В PHP не только добавляют новые возможности, но и удаляют старые, делая язык более чистым и удобным для работы. И в PHP 7.4 есть целый ряд “депрекаций”.
    PhpStorm 2019.3 подсвечивает те куски кода, которые требуют вашего внимания. Где возможно, предоставляется quick-fix ( Alt+Enter) для исправления устаревшего выражения.



    C выходом PHP 7.4 старые версии PHP заброшены. PHP 7.2 будет еще в течение года получать только исправления безопасности, а PHP 7.1 теперь официально не поддерживается. Это значит, что если будет обнаружена уязвимость, то взлом вашего сервера – это лишь вопрос времени. Так что самое время обновиться.

    PSR-12


    Новый стандарт PSR-12 пришел на смену старому доброму PSR-2 и расширяет его правилами для новых фич языка, а также исправляет неточности. Спасибо PHP-FIG за отличный апдейт! Если вы использовали PSR-2, то посмотрите, что изменилось в PSR-12.

    Стиль PSR-12 есть в PhpStorm 2019.3, и IDE сама предложит переключиться на него. Чтобы сделать это вручную, вызовите Set from… в разделе Preferences | Editor | Code Style | PHP:



    Некоторые правила PSR-12 были реализованы в виде инспекций, которые отключены по умолчанию, но PhpStorm предложит их включить, когда вы выберете стиль PSR-12. Настроить инспекции под себя можно в Preferences | Editor | Inspections in PHP | Code Style | PSR-12:



    После этого форматируйте код вручную нажатием Cmd/Ctrl+Alt+L:



    Или делайте это автоматически перед коммитом с помощью опции Cleanup:



    WSL


    PhpStorm теперь поддерживает разработку в окружении WSL (Windows Subsystem for Linux), то есть когда вы запускаете IDE на Windows 10, целевая система разработки WSL/Linux. Вы можете указать удаленный PHP-интерпретатор из WSL и использовать его для запуска скриптов, тестов, команд Composer и отладки.
    Чтобы начать, установите и настройте WSL по инструкции, а затем установите PHP, если он не идет в поставке в выбранном дистрибутиве Linux.
    После этого можно добавить CLI интерпретатор через File | Settings | Languages & Frameworks | PHP.



    Добавленный интерпретатор можно использовать для запуска тестов, Composer, или любой другой run-конфигурации.

    Другие улучшения для PHP


    Подсветка PHP в Markdown и строках
    Иногда может потребоваться использовать PHP в строковом литерале. Надеюсь, все-таки не в eval(), но вы понимаете, о чем речь. Или, может быть, вы хотели бы видеть подсветку PHP во фрагментах кода в markdown-файлах.
    Всё это доступно в PhpStorm 2019.3 благодаря специальному диалекту PHP, который называется InjectablePHP. Этот диалект работает так же? как и обычный PHP, но при этом не требует открывающихся тегов.
    Он будет автоматически внедрен в markdown, если вы используете маркер php:



    А также в строках Heredoc/Nowdoc, опять же с маркером PHP:

    Ну, и в eval() это тоже работает автоматически:



    Возможность выбрать интерпретатор PHP для тестовых run-конфигураций
    Раньше требовалось создать отдельную run-конфигурацию для удаленных интерпретаторов. В PhpStorm 2019.3 мы добавили возможность указать интерпретатор для любых PHP run-конфигураций. Так что можно легко использовать для этого Docker, Vagrant, тот же WSL или любой другой вариант.



    Выбор шрифта и цвета псевдопеременной $this


    Улучшения PHPDoc
    Традиционно PhpStorm предоставлял переходы по FQN и ссылкам в PHPDoc, но сам блок при этом отображался одним цветом как обычный комментарий.
    В PhpStorm 2019.3 докблоки получили подсветку для типов, переменных, параметров, методов и свойств. Если в блоке встречается HTML, то его теги тоже подсвечиваются.



    Мелкие полезности


    Быстрые исправления для условных выражений
    Выражения if-else, возможно, самые часто используемые конструкции языка. В PhpStorm 2019.3 мы добавили несколько быстрых исправлений Alt+Enter для манипуляции ими.

    Если внутри выражения if присутствует присваивание, то его можно быстро вынести на отдельную строку:



    Если встретились вложенные условия if, то их можно объединить в одно:



    Также можно объединить else с if внутри в один elseif:



    Или наоборот – разделить elseif на else и if:



    Рефакторинг Inline constant
    Это действие противоположно Extract constant, то есть в результате выполнения все использования константы заменяются на ее значение. Для использования нажмите Cmd/Ctrl+Alt+N на константе.



    Больше разных рефакторингов можно найти, нажав Cmd/Ctrl+T.

    Удалить вызов функции
    Нажмите Shift+Cmd/Ctrl+Delete, что удалить избыточный вызов функции:



    Авто-вставка <?php при вводе <?



    Автодополнение ‘=’ до ‘=>’ после ключа массива
    Еще один маленький “таймсейвер” в 2019.3: когда вы добавляете элемент в массив, PhpStorm быстро допечатает =>, достаточно лишь нажать =:



    HTTP-клиент


    Панель инструментов в редакторе


    В редакторе http- и rest-файлов появилась панель инструментов с быстрыми действиями:



    Run All Requests in File


    Вы можете записывать несколько запросов в одном http-файле, разделяя их символами ###. Это особенно удобно, если нужно сделать какие-то цепочки вызовов, где результат из одного используется в последующем.
    Но раньше приходилось запускать все запросы по одному, а теперь можно выполнить весь файл одним нажатием.



    Сворачивание запросов


    Если запрос большой, например вы отправляете форму с данными или в запросе много заголовков, то вам понравится возможность сворачивания запроса.
    Варианты на выбор: свернуть весь запрос, оставив только первую строку, или свернуть только тело.



    Автодополнение для хостов


    Больше нет необходимости печатать хост в запросе, если вы его уже использовали где-то в проекте. PhpStorm предложит подходящий вариант в списке:



    Динамические переменные


    Мы добавили три динамических переменных, которые можно использовать в любом месте запроса:
    • $uuid – генерирует UUID-v4 (e9e87c05-82eb-4522-bc47-f0fcfdde4cab)
    • $timestamp – текущая временная метка в формате Unix (1563362218)
    • $randomInt – случайное число от 0 до 1000

    Как обычно, для вставки переменных используйте двойные фигурные скобки:
    GET http://httpbin.org/anything?id={{$uuid}}&ts={{$timestamp}}



    Обо всех возможностях HTTP-клиента смотрите в видеоролике:
    HTTP Client in PhpStorm

    Version Control


    Переработанный интерфейс для получения проектов из VCS


    В новом диалоге можно тут же залогиниться в GitHub, или, если вы уже залогинены, посмотреть список доступных репозиториев.



    Checkout


    Мы убрали опцию Checkout и разделили ее на две операции: New Branch from Selected и Checkout. New Branch from Selected создает новую ветку, но не устанавливает трекинг. А новый Checkout создает новую локальную ветку и устанавливает трекинг remote-ветки.

    Push любой ветки


    Теперь можно запушить любую ветку, не переключаясь на нее. В попапе VCS | Branches выберите ветку и используйте Push:



    Настраиваемый формат даты


    Теперь можно сконфигурировать формат даты, которая будет отображаться в VCS Annotate или в любых отображениях лога. Например, вы можете установить значение mm/dd/yyyyy, если хотите использовать формат США.



    IDE


    Улучшения в управлении плагинами


    Для PhpStorm есть много крутых плагинов, но раньше управлять ими было не всегда удобно, потому что каждый раз после установки/удаления требовался перезапуск IDE. В PhpStorm 2019.3 на уровне инфраструктуры мы реализовали поддержку динамической установки плагинов. Это значит, что теперь есть возможность устанавливать и удалять плагины без перезапуска. Пока что это доступно только для тем и плагинов с картами горячих клавиш, но в следующих релизах мы планируем распространить это на большинство плагинов.

    Контрастные полосы прокрутки


    Полосы прокрутки теперь можно сделать более различимыми с помощью опции “Use contrast scrollbars” в Preferences | Appearance & Behavior | Appearance.

    Гладкая прокрутка


    Если включена опция Smooth scrolling в Preferences | Appearance & Behavior | Appearance, то прокрутка мышью или тачпадом во всем интерфейсе будет гладкой, а не построчной.

    Поиск в выделенном тексте


    Выделите кусок кода в редакторе и вызовите Find нажатием Cmd/Ctrl+F и поиск будет осуществляться только по выделенному тексту. Если нажать Cmd/Ctrl+Fещё раз, то поиск переключится на весь файл.



    Новая команда для сортировки строк по алфавиту


    Теперь можно легко отсортировать выбранные строки в редакторе вызвав Edit | Sort Lines из меню или командой Sort Lines в поиске по командам Find Actions по нажатию Cmd/Ctrl+Shift+A:


    Больше разных действий со строками доступно в плагине String Manipulation.

    Поддержка MongoDB


    Наконец-то настал этот день, когда мы начали работу над поддержкой MongoDB.
    Что, собственно, работает в этой версии:

    Просмотр коллекций
    Можно видеть коллекции и поля в окне баз данных. Мы получаем первые 10 документов из каждой коллекции, чтоб вытащить информацию о полях (настраивается).



    Просмотр данных
    Смотрите документы из любой коллекции или результаты запроса. Работает сортировка по колонкам, фильтры и пагинация.
    Также можно включить режим отображения в виде дерева нажав на шестерёнку и дальше View as… | Tree.



    Консоль запросов
    Пока в консоли нет дополнения кода, но запускать запросы и просматривать результаты уже можно. Поставьте курсор на запросе и нажмите Cmd/Ctrl+Enter или на иконку Play в тулбаре.
    Дополнение для запросов ожидается в следующих версиях.

    PhpStorm включает в себя все возможности DataGrip из коробки, так что в инструментах БД еще очень много других нововведений. Скоро будет обзор релиза DataGrip 2019.3 от наших коллег.
    Также, как всегда, PhpStorm включает в себя все обновления из WebStorm.
    А полный список изменений можно найти в очень больших release notes.

    И напоследок, короткий ролик (на английском) с демонстрацией главных фич релиза:



    На этом все на этот раз. Спасибо, что дочитали до конца! Вопросы, пожелания, баг-репорты и просто мысли высказывайте в комментариях!

    Ваша команда JetBrains PhpStorm
    JetBrains
    237.11
    Делаем эффективные инструменты для разработчиков
    Share post

    Comments 42

      0

      Ребят, интерпретатором в WSL — не отделаетесь, дайте проброс IDE в каталог WSL, который не mounted в windows. Больше ничего не надо, остальное делает докер.

        0
        image
        Так вроде есть доступ к файловой системе WSL, я пробовал работать с проектом ещё до выхода PhpStorm 2019.3, но до момента релиза всё было как то забагованно
          0

          Это mount в windows. Нам это не нужно, т.к. производительность файловой системы в этом случае — не для разработки.
          Нужен проброс как в vscode.

            0
            помимо того, что уже сказал ReDev1L, это сетевой маунт. То есть никакого отслеживания изменений файлов + по неизвестной причине раз в 10-15 минут этот маунт умирает при активной разработке.
              0
              Если использовать git внутри wsl, то PhpStorm не подсвечивает строки с изменениями (это логично), если использовать git в Windows, то в какой-то момент перестают трекаться изменения, в диалоге коммита нужно нажимать «обновить», сделайте хоть чтобы «обновить» вызывалось автоматически при открытии диалога коммита (это ведь ничего не поломает), а то так можно «удачно» пропустить важные файлы. (проект лежит в папке пользователя в wsl)
            0

            Вот специально настраивал у себя PHPDoc чтобы не бросались просто так в глаза.
            Работает, при необходимости взглянул, прочитал. Нет необходимости — код более читаемый, чем комменты.
            Примерно так:


            В версии 2019.2.5

            image


            А после обновления в комментариях хинты подсвечиваются из основной цветовой схемы, и в PHPDoc нет возможности вернуть их взад :(


            В версии 2019.3

            image


            Не критикал, конечно же, но привыкнуть надо.


            В остальном — прям отлично! Апдейт крутой!

            +1

            Спасибо за предпятничный апдейт, очень порадовали! Первым в глаза бросился Smooth scrolling и измененные цвета в PhpDoc :)
            Отдельная благодарность за усовершенствование поиска по выделенному фрагменту кода, это просто бальзам на душу.


            Авто-вставка <?php при вводе <?

            Круто, но здесь закралась одна неприятность. Что делать, если я хочу <?=, а вместо этого автокомплитом получаю <?php?


            Еще надеюсь, что у вас получится в скором времени апдейтнуть ваш Youtrack плагин, а то он там исключениями бросается сейчас.

              0

              Автовставка php после <? действительно очень раздражает. Когда выработана привычка набирать всю конструкцию вручную, то получается или <?phpphp или <?php=

                0
                Мы починили <?phpphp, фикс будет в минорном апдейте — youtrack.jetbrains.com/issue/WI-49337
                Простите за неудобство.
                  0
                  Не знаю насколько удобная фича автоподстановка, я для себя завел шаблоны по типу:
                  p + TAB <?php| ?>
                  pp + TAB <?=|?>
                0
                Мы собираемся сделать PHPDoc настраиваемым. Если интересно, проголосуйте — youtrack.jetbrains.com/issue/WI-48105

                Что делать, если я хочу <?=, а вместо этого автокомплитом получаю <?php?


                Мы сделали youtrack.jetbrains.com/issue/WI-49636, придется нажать дополнительно Backspace, но хотя бы не 3 раза.

                Еще надеюсь, что у вас получится в скором времени апдейтнуть ваш Youtrack плагин, а то он там исключениями бросается сейчас.


                Проголосуйте, пожалуйста, за youtrack.jetbrains.com/issue/WI-49940, чтобы следить за обновлениями!
                  0
                  придется нажать дополнительно Backspace, но хотя бы не 3 раза.

                  И когда нужно ввести <?=, тоже нужно будет жать Backspace? Лучше была бы возможность вообще отключить автовставку php.


                  А еще битриксоиды будут негодовать. У них везде <? ?>.

              0
              del
                0

                По поводу типизированных свойств, есть неприятный баг, когда шторм предлагает применить инспекцию по внедрению типа унаследованного свойства для сторонних библиотек из /vendor/ папки и это оборачивается модификацией чужих исходников и как следствие возможные Fatal Error.


                  0
                  Спасибо за подробное описание! Я завел баг — youtrack.jetbrains.com/issue/WI-49957
                  Пожалуйста, проголосуйте, чтобы следить за обновлениями.
                  0
                  Вопрос про вертикальное выделение — раньше было на mac с альтом, а сейчас как? множественные курсоры раставляются все еще альтом
                    +1
                    Мы поменяли на Option+Shift. Вы можете поменять в Preferences | Keymap | Editor Actions | Create Rectangular Selection.
                    0
                    Авто-вставка <?php при вводе <?

                    В 7.4 тег <?= ?> deprecated?
                    0
                    А какие из этих улучшайзеров можно отключить?
                      0

                      Вот беда в том, что многие фичи, ломающие привычки, вводятся без возможности их отключить и приходится ждать новых версий, когда отключение (может быть) сделают.

                        0
                        Собственно поэтому и задал вопрос. Пока сижу на 2019.1, 2019.2 что-то тормозила.
                          0
                          До сих пор нет возможности сохранять файл без изменений.
                        0
                        При работе со скринридером после нажатия enter на файле проекта курсор не попадает в редактор, оставаясь на кнопке файла. Раньше можно было нажать enter еще раз и таки туда перейти. А сейчас для этого escape нужно нажимать. Что совсем неудобно.
                          0
                          Уточните, пожалуйста, какой версией IDE Вы пользовались прежде?
                          0
                          2019.2.0
                            0
                            Спасибо. У вас включена опция Support screen readers в ИДЕ? www.jetbrains.com/help/idea/accessibility.html
                            Вы можете это проверить в «Settings | Appearance & Behavior | Appearance | Accessibility». Обратите внимание, что, если опция включена через ключ «ide.support.screenreaders.enabled» в custom properties, то в настройках опция отображается включенной, но на неё нельзя перевести фокус с помощью клавиатуры (это известная проблема — youtrack.jetbrains.com/issue/IDEA-226827).

                            Если опция включена, то создайте, пожалуйста, новый баг: youtrack.jetbrains.com/newIssue
                            Приложите к нему полный архив с логами из «Help | Compress Logs and Show in...»
                            0
                            Не добавляются кнопки External Tools на Main Toolbar. Точнее добавляются, но при любом изменении настроек исчезают, достаточно даже просто открыть окно настроек и ничего не меняя нажать Ок. Любые другие кнопки не пропадают (вроде)
                            0
                            Расскажите, пожалуйста, подробнее про новый шрифт JetBrains Mono.
                              0
                              Это наш новый шрифт, он будет более детально представлен в релизе очень скоро.
                              0
                              Подскажите, можно ли заставить консольное окно корректно отображать кириллицу и ansi форматирование?

                              image

                              Мучаюсь с этим с выхода версии 2019.2, когда «Run command» заменили «Run once».
                                0
                                Планируется ли поддержка Stylistic sets? ( github.com/tonsky/FiraCode#stylistic-sets )
                                Если да, то когда? )
                                0
                                Ещё с предыдущих релизов тянется баг.

                                Воспроизведение A:

                                1. В настройках Editor | Color Scheme | General в секции Code [кастомной] схемы задать цвета текста и фона Matched brace.
                                2. Закрыть с сохранением окно настроек.

                                Результат соответствует ожиданиям.

                                3. Вернуться в настройки, создать копию схемы (Duplicate...) и переключиться на неё.
                                4. Закрыть с сохранением окно настроек.

                                Изменение цветов оказывается отменённым.

                                Если вернуться в настройки, у дубликата схемы эти параметры обнаруживаются сброшенными. У оригинальной — нет, но если переключиться на оригинальную схему и выйти из настроек, цвета опять оказываются дефолтными. И по факту, и в схеме.

                                Воспроизведение B:

                                1. В настройках Editor | Color Scheme | General в секции Code [кастомной] схемы задать цвета текста и фона Matched brace.
                                2. Закрыть с сохранением окно настроек.
                                3. Перезапустить IDE.

                                Изменение цветов оказывается отменённым.

                                Возможно, дело в плагинах. У меня активны Material Theme UI и Rainbow Brackets. Не пробовал без них.

                                Ещё с год назад, как начал пользоваться этой прекрасной средой разработки, настроил себе привычную схему оформления. И всё работало как должно. А много позже решил ещё парные скобки/теги более явно выделить, и какая-то фигня началась)
                                  0
                                  Спасибо за новые фичи, в том числе за развитие HTTP request, еще в нем прям остро необходимы предвыполняемые скрипты по аналогии с поствыполняемыми — очень распространенный кейс подписи запроса с использованием хэша по контенту никак сейчас не выполнишь, приходится ручками генерировать хэш при каждом изменении контента, а это очень не производительно.
                                  И даже иша уже есть youtrack.jetbrains.com/issue/WI-44191

                                  Only users with full accounts can post comments. Log in, please.