Вышел PhpStorm 2021.3

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

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!



В этом релизе мы полностью поддержали PHP 8.1, улучшили обработку дженериков, реализовали drag-and-drop для перемещения классов и пространств имен, обновили HTTP-клиент, повысили удобство процесса развертывания и управления версиями, а также добавили новые возможности удаленной разработки.

Под катом подробный разбор всех изменений и новых возможностей с кучей гифок.

Скачать PhpStorm можно на сайте или через приложение Toolbox App.

Как и раньше, студентам, преподавателям и тем, кто занимается опенсорс-проектами, JetBrains предоставляет бесплатные лицензии. Стартапам доступна скидка 50%.



Итак, вот что мы подготовили для вас в этом обновлении:

Полная поддержка PHP 8.1

  • Перечисления
  • Readonly-свойства
  • Пересечения типов
  • Новое (не)возвращаемое значение: `never`
  • Финальные константы
  • Оператор `new` в инициализаторах
  • Синтаксис First-class callable
  • Устаревшие возможности

Дженерики в PHP

  • Улучшенная поддержка Doctrine Collections
  • Поддержка коллекций Laravel 9
  • Вывод дженерик-типа из конструктора
  • Поддержка аннотаций phpstan-*


Улучшения рефакторингов

  • Поддержка drag-and-drop для рефакторинга Move Class
  • Inline function or method
  • Inline variable


Удаленная разработка

Более быстрый и улучшенный деплоймент

  • Поддержка `rsync`
  • Повторная попытка для неудачных загрузок
  • Ускорение для SFTP/FTP/FTPS благодаря многопоточным соединениям
  • Новое действие: Загрузить все открытые файлы
  • Быстрое переключение сервера по умолчанию для проекта
  • Поддержка proxу для SSH соединений


HTTP клиент

  • Поддержка текстовых и JSON стримов
  • Бинарные ответы
  • Перенаправление вывода в файл или каталог
  • Поддержка идентификаторов HTTP-запросов


VCS

  • Выравнивание изменений при просмотре диффа
  • Checkout and Rebase onto Current для удаленных веток
  • Реорганизованные настройки VCS
  • Новое действие ‘Push All up to Here’


Обновления UX

  • Новое окно Bookmarks для закладок
  • Предпросмотр кода в Show Usages
  • Улучшения для Markdown


PHP 8.1


PHP 8.1 уже вышел! Подробнее об обновлениях языка можно узнать из видеоролика, который мы подготовили совместно с Brent Roose и авторами разных RFC: Larry Garfield, Matheu Napoli, Aaron Pietrowski, Дмитрий Стогов, Никита Попов.

PhpStorm 2021.3 полностью поддерживает изменения, введенные PHP 8.1. Подробнее об этом рассказываем ниже.

Как обычно, чтобы попробовать новые возможности, необходимо установить PHP 8.1 в качестве PHP language level. Настройка доступна в панели инструментов. Либо вы можете прописать соответствующее требование в composer.json.



Перечисления


Вместо набора констант теперь можно использовать перечисления (enum). Они обеспечат проверку типов из коробки.



Поддержка перечислений появилась в PhpStorm еще в релизе 2021.2. Подробнее об этом читайте в предыдущем хабрапосте.

Readonly-свойства


Свойства с флагом readonly — это свойства, которые нельзя изменить после инициализации (то есть после присвоения им значения).

В предыдущих версиях PHP можно было добиться похожего поведения с помощью приватных сеттеров. Однако ключевое слово readonly позволяет сделать класс более читаемым, а ограничение — более строгим.



Свойство readonly может быть инициализировано только в той же области видимости, в которой оно объявлено, то есть в самом объявлении либо в методе класса.

Свойства с флагом readonly должны быть типизированы, но если вы не знаете тип заранее, можно использовать mixed.

Если вы проинициализировали свойство readonly объектом, то этот объект (его внутреннее состояние) останется изменяемым.

У свойства readonly не может быть значения по умолчанию. Однако такое свойство можно инициализировать в конструкторе: нажмите Alt+Enter, чтобы применить соответствующее быстрое исправление:



Пересечения типов


В PHP 8.0 были добавлены объединения типов (union). А теперь в PHP 8.1 появились пересечения (intersection).

Синтаксис типов intersection такой: TypeA&TypeB. То есть значение должно одновременно являться instanceof TypeA и instanceof TypeB.

В PhpStorm 2021.3 автодополнение типов union и intersection устроено одинаково, ведь их различие только в том, что union может содержать члены всех указанных типов, а intersection должен содержать члены этих типов.



Комбинации с типами union PHP пока не поддерживает. Поэтому такое выражение будет считаться ошибкой:



В более старых версиях PHP можно было встретить пересечения типов в аннотациях PHPDoc. Они тоже поддерживаются в PhpStorm 2021.3. Когда вы решите перейти на PHP 8.1, то сможете легко трансформировать аннотации PHPDoc в нативные определения с помощью Alt+Enter:



Новый тип never


В PHP 8.1 появился новый тип для (не)возвращаемых значений — never.

Tип never означает, что функция (или метод) не возвращает ничего и либо генерирует исключение, либо завершает выполнение вызовом die(), exit(), trigger_error() и т. п.

Тип never улучшает анализ кода. Он делает практически то же самое, что и атрибут PhpStorm #[NoReturn], — отличие в том, что теперь это полноценная часть языка!



Финальные константы


PHP 8.1 позволяет объявлять константы класса как финальные, после чего их нельзя переопределить в дочерних классах.



В PHP 8.0 и более ранних версиях языка константы в интерфейсах были неявно финальными, и их нельзя было изменить. В PHP 8.1 эту неконсистентность убрали: теперь константы по умолчанию — не финальные.



Оператор new в инициализаторах


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

У этого есть приятный побочный эффект — появляется возможность использовать вложенные атрибуты.



PhpStorm проверяет, где именно вы используете оператор new. Например, использовать его со свойствами или константами класса нельзя, так как при этом возникают проблемы с порядком инициализации:



Синтаксис First-class callable


В PHP 8.1 появилась возможность получить ссылку на любую функцию.

Раньше это нужно было делать вот так:
$fn = Closure::fromCallable('strlen');


Теперь все гораздо проще:
$fn = strlen(...);


Новый синтаксис соблюдает область видимости в точке создания вызываемого объекта, а также поддается статическому анализу и выглядит более лаконично.



Вызовы fromCallable можно преобразовать к новому синтаксису. Для этого нажмите Alt+Enter и выберите нужное быстрое исправление:

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


PHP порой удивлял своим причудливым поведением. Но с каждой новой версией языка проблем в нем становится все меньше. И PHP 8.1 не исключение: многие проблемные места объявлены устаревшими.

Чтобы перевести проект на PHP 8.1, прежде всего нужно поправить совместимость и свериться со списком устаревших возможностей.

PhpStorm поможет найти устаревший код и обновить его.

Вот пара примеров устаревших возможностей.

Использование интерфейса Serializable


Вместо интерфейса Serializable рекомендуется использовать магические методы __serialize() и __unserialize(), появившиеся в PHP 7.4.

В PHP 8.1 разрешает использовать Serializable, но только в тех случаях, когда реализующий его класс содержит __serialize() и __unserialize().

PhpStorm выделит неправильный код и предложит добавить магические методы в класс при помощи быстрого исправления:



Использование $GLOBALS


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


Подробнее об устаревших возможностях PHP можно узнать в руководстве по обновлению.

Улучшения для дженериков


В PhpStorm 2021.2 появилась долгожданная базовая поддержка дженериков. Мы продолжаем ее совершенствовать. Спасибо за ваши отзывы и тикеты в трекере!

Вот что нам удалось сделать в этом релизе:

Улучшение поддержки Doctrine Collections


Аннотация @template теперь поддерживает интерфейс IteratorAggregate. Таким образом, итерация по коллекциями Doctrine теперь работает из коробки!



Поддержка коллекций Laravel 9


В ближайшем выпуске Laravel, пакет illuminate/collections будет покрыт аннотациями дженериков. В PhpStorm 2021.3 для них автоматически заработает автодополнение кода.



Вывод дженерик-типов из конструктора


Допустим, в конструкторе есть дженерик-параметр @template, и вы хотите уточнить тип, передав объект в качестве аргумента. Это не сработало бы в предыдущих версиях. В версии 2021.3 это работает правильно. Также вы сможете воспользоваться автодополнением.



Поддержка аннотаций phpstan-*


PhpStorm 2021.3 поддерживает любые аннотации для дженериков. Можно использовать префикс @psalm-* или @phpstan-*, а также чистые теги без префиксов, например @template.

Улучшенные рефакторинги


Перемещение классов и неймспейсов с помощью drag-and-drop

Источник: https://habr.com/ru/company/JetBrains/blog/594473/


Интересные статьи

Интересные статьи

Языков программирования в мире много — около 8 тысяч, если учитывать вообще все, что может считаться языком программирования, включая всякие шуточные и теоретические проекты. На днях вы...
GitLab 13.9 уже доступен — с улучшениями DevSecOps, панелью оповещений безопасности для обработки приоритетных уведомлений, режимом обслуживания для постоянной поддержки распределённых ...
Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.
Автокэширование в 1с-Битрикс — хорошо развитая и довольно сложная система, позволяющая в разы уменьшить число обращений к базе данных и ускорить выполнение страниц.