PHP-Дайджест № 185 (20 июля – 3 августа 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Alpha 3, PhpStorm 2020.2, новый оператор ?->, снова обсуждение синтаксиса атрибутов и другие новости PHP Internals, обзор системы типов в PHP, порция полезных инструментов, видео, стримы и многое другое.

Приятного чтения!



Новости и релизы


  • PHP 8.0.0 Alpha 3 — Последний альфа-релиз из запланированных. Первая бета ожидается 6 августа.
  • Релиз PhpStorm 2020.2 — Объединенные типы PHP 8, новый движок потока управления, пул-реквесты GitHub, OpenAPI. По ссылке подробный разбор этих и других изменений.

PHP Internals


  • [RFC] Shorter Attribute Syntax Change — История с синтаксисом атрибутов в PHP 8 продолжается. Предыстория была в канале.

    Вкратце: сначала был << >>, переголосовали за @@, а теперь новый виток обсуждений.
    У @@ были проблемы с парсером, но они решены благодаря нижеупомянутому RFC про неймспейсы. Тем не менее у него есть другие проблемы, и в качестве альтернативы предлагался вариант #[ ] как в Rust, но и у него есть минусы.

    Дошло до того, что рассматривается вариант переголосования за новый синтаксис и перенос атрибутов в PHP 8.1, потому что фиче-фриз для 8.0 уже 4 августа. То есть либо в PHP 8.0, но с одним из << >>, #[], @@, либо в PHP 8.1 с чем угодно.

    Для последнего случая предлагаются самые разные новые варианты: @[Attribute], в комментарии PHPDoc с двойной собачкой /** @@MyAttribute */, или даже маловероятный — переделать оператор подавления ошибок из @ в @@, а одинарную @ использовать в атрибутах.



    Еще забавно, что в ответ на письмо Дерика об ужасности @@, кто-то написал, что T_PAAMAYIM_NEKUDOTAYIM тоже ужасен, но не тут-то было — в PHP 8 Alpha 3 он уже не отображается для пользователя.
  • check [RFC] Treat namespaced names as single token — В PHP 8 весь неймспейс считается одним токеном. Это позволяет использовать внутри неймспейса ключевые слова, например, namespace app\function { class Foo {} } и избавляет от потенциальных проблем обратной совместимости при введении новых ключевых слов.

    Надеюсь, вам такое не приходилось встречать, но с этим изменением неймспейсы не могут содержать комментарии:
    use /** Try comments */ \FullyQualified \ /* in this ugly way */ SometTotallyDifferentTrait /** also after */;
  • check [RFC] Saner string to number comparisons — Почти единогласно прошло предложения ломающее обратную совместимость.

    В PHP 8, при сравнении чисел и строк с помощью нестрогого == оба операнда приводятся к строке и сравниваются как строки, если один из них не является числовой строкой.

    0 == 'foobar' теперь официально false.


    Это также влечет за собой изменение поведения всех операторов сравнения <=>, ==, !=, >, >=, < и <=, конструкции switch, функций типа in_array(), sort() и других.
  • check [RFC] Nullsafe operator — В PHP 8 будет новый оператор nullsafe: ?->.
    C ним вместо пачки вложенных условий можно обращаться к свойству или методу с проверкой на null.

    Например, такой приватный метод с кучей условий:
    Скрытый текст
    
    private function getUserCountry(): ?string
    {
        $session = $this->sessionStorage->getSession();
    
        if (null === $session) {
            return null;
        }
    
        $user = $session->getUser();
    
        if (null === $user) {
            return null;
        }
    
        if (null === $user->address) {
            return null;
        }
    
        return $user->address->country;
    }
    
    можно будет заменить одной строкой:
    $country = $this->sessionStorage->getSession()?->getUser()?->address?->country;

    Прислал Валентин Удальцов (@Пых).
  • check [RFC] Allow trailing comma in closure use lists — В конце списка use у замыканий в PHP 8 можно будет оставлять запятую по аналогии с тем, как это уже работает для аргументов и параметров функций.
    Скрытый текст
    
    $f = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument,
    ) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3, // Вот тут теперь тоже можно запятую
    ) {
       ...
    };
    
  • check [RFC] Named Arguments — В PHP 8 будут именованные аргументы!
    Теперь можно будет передавать значения в функцию или метод на основе имени параметра, а не только его позиции.
    htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);
    станет:
    htmlspecialchars($string, double_encode: false);

    Подробнее об именованных аргументах в посте stitcher.io/blog/php-8-named-arguments.
  • [RFC] Renamed Parameters — Проблема переименования параметров методов была основным камнем преткновения в обсуждении именованных аргументов. Именно ее пытается решить автор этого RFC.

    Предлагается добавить возможность указывать внутреннее и внешнее имя параметра через двоеточие:
    
    function callBar(Foo $internalName:externalName) {
        $internalName->bar();
    }
    
    $x = new Foo();
    callBar(externalName: $x);
    

    Что-то подобное есть в Swift. В качестве альтернативы, возможно решение в виде атрибута @@NameAlias.
  • cross [RFC] Make constructors and destructors return void — Отклонен.

Инструменты


  • ramsey/conventional-commits — Библиотека для валидации сообщений коммитов согласно спецификации Conventional Commits. Кстати, интересная спецификация.
  • jubianchi/ppc — Генератор парсеров. Альтернативное решение phplrt/phplrt.
  • thephpleague/mime-type-detection — Мини-библиотека для определения mime-типа файла.
  • zakirullin/typed-accessor — Обертка над скалярными значениями для получения данных более безопасно.
  • nette/php-generator — Генератор PHP-кода с fluent-интерфейсом.

Symfony


  • Неделя Symfony #709 (27 июля — 2 августа 2020)
  • Using Symfony's service iterators for secondary flows
  • Symfony 4.3 и 5.0 Больше не поддерживаются:

Laravel


  • Секьюрити апдейт Laravel 6 и 7 — В Laravel обнаружена уязвимость в куках сессий и выпущены обновления для 6 и 7. Пользователям Laravel 5.5 рекомендуется не использовать драйвер сессий 'cookie'.
  • butschster/LaravelCycleORM — Интеграция cycle/orm в Laravel.
  • Годная инструкция как перенести легаси-приложение на Laravel.
  • habr Подсистема событий как способ избавиться от задач по «допилу».
  • habr Laravel-Дайджест (27 июля – 2 августа 2020)
  • video Стрим с Nuno Maduro и Freek Murze по конвертации тестов из чистого PHPUnit в Pest.
  • video Видеозаписи Laracon EU Online 2020

Материалы для обучения


  • Все что необходимо знать о системе типов в PHP — Отличный подробный пост о типах в PHP со всеми деталями и особенностями.
  • PHP 8: примеры кода до и после.
  • О проблемах покрытия кода и как его улучшить — Покрытие веток, путей, метрики.
  • PHP: Preloading — Manual — Наконец-то доступна подробная документация по предзагрузке, добавленной в PHP 7.4.
  • Рассылка PhpStorm, But Better! #2 — О кастомизации интерфейса.
  • LearnXdebug.com — Подборка ресурсов по Xdebug.
  • Почему плохо надеяться на БД для валидации данных (уникальные ключи, ненулевое значение, внешние ключи) и что лучше делать вместо этого.
  • ru Что нужно учесть при миграции с MySQL в Postgres.
  • ru Пишем простейший сервис генерации заглушек изображений.
  • habr PHP Internals News Эпизод #38: предзагрузка и WeakMaps.
  • habr Порядок вычисления в PHP.
  • habr Уязвимости PHP-фреймворков.
  • habr Вы уверены, что пишете объектно-ориентированный код?

Аудио/Видео


  • audio Подкаст PHP Internals News #63 — С André Rømcke о предложении указывать модификатор доступа отдельно на чтение и запись для свойств.
  • audio Подкаст PHP Internals News #64 — С Benjamin Eberlei обо всех новых обсуждениях вокруг атрибутов.
  • video Стрим с Дериком по работе с Xdebug — Настройка на Laravel Valet и PhpStorm, профайлинг, отладка, и советы.
  • videoru ХудоБедно учим онлайн с Дмитрием Елисеевым — 3 августа в 17.00, новый формат стримов с Антоном Моревым и Сергеем Жуком.
  • videoru MoreView #12 | Дмитрий Елисеев — Основатель elisdn.ru и deworker.pro. Про PHP, фреймворки, обучение и прочее.
  • videoru MoreView #13 | Валентин Удальцов — Автор канала «Пых» и ведущий разработчик в Happy Job.
  • videoru Поиск и устранение утечек памяти в PHP — Запись стрима с Валентином Удальцовым.
  • audioru Пятиминутка PHP №81 с обзором rectorphp/rector — Теперь короткие выпуски Пятиминутки также в Instagram и TikTok.

Спасибо за внимание!

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

Больше новостей и комментариев в Telegram-канале PHP Digest.

Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 184
Источник: https://habr.com/ru/post/513558/


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

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

Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Всем привет! Продолжаем дайджесты новостей и других материалов о свободном и открытом ПО и немного о железе. Всё самое главное про пингвинов и не только, в России и мире. 29-ле...
Cервисе Ethermap, разработанный Крисом Лимби 1 | Leaflet | map data OpenStreetMap contributors Картографирование Эндрю Вайзман из Apple создал новое задание на сервисе MapRoulette по ус...
Свежая подборка со ссылками на новости и материалы. В выпуске: CakePHP 4, Codeception 4, Phalcon 4 и другие релизы, порция полезных инструментов, подкасты, видео с прошедших митапов, и многое д...
В 1С-Битрикс: Управление сайтом (как и в Битрикс24) десятки, если не сотни настраиваемых типов данных (или сущностей): инфоблоки, пользователи, заказы, склады, форумы, блоги и т.д. Стр...