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
    119,46
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией

    Похожие публикации

    Комментарии 48

      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
                                    0
                                    Пару багов словил:
                                    • полный путь до проекта в меню open recent;
                                    • phpstorm не хотел запускаться при запущенном pycharm, и наоборот. вылечилось перезагрузкой машины;
                                    • если открыто несколько проектов, при попытке закрыть один из них он как бы закрывается, но не до конца. остаётся окно phpstorm, где был проект. повторное нажатие на крестик закрывает все проекты;

                                    Ну и я тоже против цветного PhpDoc ;)
                                      0
                                      phpstorm не хотел запускаться при запущенном pycharm

                                      Это потому что, если пользуются 2+ IDE от JetBrains, то не надо лохматить бабушку, а переходить сразу на IntelliJ IDEA :) И по деньгам экономия, и не надо хоткеи настраивать по нескольку раз.
                                        0

                                        А если это бесплатная PyCharm Community? И почему два разных продукта с разными путями установки и разными конфигами не могут работать одновременно?

                                        0
                                        полный путь до проекта в меню open recent

                                        Причем не у всех, а как-то рандомно. А еще они дублируются в списке, а уже открытые остаются в списке, хотя раньше открытые проекты скрывались из списка до закрытия.

                                        0
                                        Спасибо за нововведения! Немного странные впечатления по реализации функции Specify the interpreter for PHP test run configurations
                                        1. Почему интерпретатор доступен в списке, только если в его настройках поставлена галочка Visible only for this project? Даже не могу объяснить, почему это странно
                                        2. Почему выбранный интерпретатор используется при вызове phpunit, но не используется при вызове phpunit с coverage? Как-то странно и не интуитивно, учитывая, что эти кнопки вызова даже в интерфейсе рядом
                                          0
                                          Гит не хочет коммитить (неактивный пункт меню везде) если в изменениях только удаления файлов. Хоткеем коммитит

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

                                          Самое читаемое