PHP-Дайджест № 182 (1 – 22 июня 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: 3 принятых и 6 новых RFC-предложений из PHP Internals, включая голосование за новый синтаксис для атрибутов — @@ и почему #[] был бы лучше, переименования black/whitelist в PHP-мире, как отлаживают PHP-разработчики, аналог ngrok на PHP, видео, подкасты и многое другое.

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



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


  • ru PHP исполнилось 25 лет — Таймлайн с основными событиями в истории языка.
  • PHP 7.4.7 — Кроме прочего, в этом обновлении исправлена ошибка yield from.
  • PHP 7.3.19
  • Composer 2.0.0-alpha1
  • The State of Developer Ecosystem in 2020 — PHP-секция из опроса разработчиков от JetBrains.

    65% опрошенных указали, что для отладки пользуются подходом dump & die, поэтому провокационный твит автора Xdebug ожидаемо вызвал бурную реакцию в сообществе:


PHP Internals


  • check [RFC] Attribute Amendments — Приняты дополнения к атрибутам: возможность группировать <<Attr1, Attr2>>, PhpAttribute переименован в Attribute, валидация и возможность добавлять несколько одинаковых атрибутов.
  • check [RFC] Ensure correct signatures of magic methods — Сигнатуры магических методов в PHP 8 будут валидироваться. Например, сейчас можно объявить в классе вот такой магический метод:
    Скрытый текст
    class Foo
    {
        function __get(int $name): void
        {
            echo $name;
        }
    }
    (new Foo)->{42};
    
    В PHP 8 это вызовет ошибку на этапе компиляции.
  • check [RFC] Make sorting stable — Все стандартные функции сортировки в PHP (sort, usort, asort и т.д.) начиная с PHP 8.0 будут стабильными. Это значит, что гарантируется оригинальный порядок элементов с одинаковыми значениями. В текущих версиях легко найти примеры, когда это не так.
  • cross [RFC] Opcache optimization without any caching — Отклонено предложение по выполнению оптимизаций без кеширования опкодов.
  • [RFC] Make constructors and destructors return void — Сейчас в PHP можно возвращать любые значения из конструкторов и деструкторов, например:
    Скрытый текст
    class Test {
            public function __construct() {
                    return 0;
            }
    
            public function __destruct() {
                    return 1;
            }
    }
    
    $test = new Test();
    
    // this prints 0
    echo $test->__construct();
    // this prints 1
    echo $test->__destruct();
    
    Предлагается в PHP 8.0 бросать Deprecated предупреждение в таких случаях. А уже в PHP 9.0 запретить полностью и генерировать Fatal Error.
  • [RFC] Treat namespaced names as single token — Из-за того, что каждый элемент неймспейса рассматривается интерпретатором как отдельный токен, внутри неймспейса не может быть ключевого слова. Например, namespace app\function { class Foo {} }; свалится с ошибкой Parse error. Предлагается считать токеном весь неймспейс — это позволит минимизировать проблемы обратной совместимости при введении новых ключевых слов.
  • [RFC] Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON — Токен :: в PHP называется T_PAAMAYIM_NEKUDOTAYIM — этот факт даже был обозначен как проблема № 1 в списке грустей PHP.
    Автор предлагает переименовать токен. Смысла в этом нет, потому что в сообщениях об ошибке итак выводится ::, а с таким названием он и гуглится идеально.
  • [RFC] Shorter Attribute Syntax — Аттрибуты уже были приняты для PHP 8, но синтаксис многим не по душе. На голосование выставлено три варианта: <<Attr>> (текущий) vs @@Attr vs #[Attr]. Brent Roоse привел несколько убедительных аргументов в пользу #[ ]:
    • Такой же синтаксис в Rust.
    • Он обратно совместим: #[Attribute] просто проигнорируется интерпретатором PHP <=7.4 как комментарий.
    • @@ можно спутать с оператором подавления ошибок (пример).
    • <<>> тоже не очень, потому что можно спутать с битовыми операторами и в будущем с дженериками, которые вероятно будут использовать одинарные угловые скобки <>.

  • [RFC] Change terminology to ExcludeList — Тема переименования потенциально неполиткорректных терминов не обошла стороной и PHP-мир. В Internals были горячие обсуждения.
    В ядре PHP изменение только в одном месте: директиву конфигурации опкеша opcache.blacklist_filename предлагается заменить на opcache.exclude_list_filename.
    В других PHP-инструментах соответствующие изменения уже внесли: PHPUnit, Drupal, Xdebug, Yii, Composer (+ работа с не-master Git-ветками). Также сделали правила для PHP_CodeSniffer для поиска «плохих» слов.
  • [RFC] Nullsafe operator — Вместо пачки вложенных условий предлагается добавить возможность обращения к свойству или методу с проверкой на null:
    $country = $session?->user?->getAddress()?->country;

    Вместо
    $country =  null;
    
    if ($session !== null) {
        $user = $session->user;
    
        if ($user !== null) {
            $address = $user->getAddress();
    
            if ($address !== null) {
                $country = $address->country;
            }
        }
    }
    
  • Обновлено расписание PHP 8.0 — Заморозка новых фич сдвинута на 4 августа, а финальный релиз назначен на 26 ноября.
  • Пощупать PHP 8 можно на известном ресурсе 3v4l.org. Для этого достаточно посмотреть результат запуска в ветке php-master.

Инструменты


  • beyondcode/expose — Сервис туннелирования на чистом PHP. Аналог ngrok. Подробнее было в канале PHP Digest.
  • canvural/php-openapi-faker — Библиотека для генерации тестовых данных для OpenAPI запросов/ответов/схем.
  • doctrine/migrations 3.0.0 — Мажорное обновление инструмента для миграций.
  • mathiasverraes/uptodocs — Маленький инструмент, который находит блоки PHP-кода в Markdown-файлах и запускает их для поиска падающих.

Symfony


  • Доступна сертификация по Symfony 5.
  • В Symfony 6 для конфигов будут использоваться PHP-файлы вместо YAML или XML.
  • dbu/snake-bundle — Игра змейка, реализованная на symfony/console.
  • Какой прирост производительности ожидать от приложения на Symfony 5 с предзагрузкой опкеша?
  • 10 советов по тестированию Symfony.
  • Защита Symfony-приложений от Top 10 OWASP уязвимостей.
  • Неделя Symfony #703 (15-21 июня 2020)

Laravel


  • spatie/laravel-cronless-schedule — Пакет для выполнения задач по расписанию без использования cron. Под капотом ReactPHP и таймеры. Интро.
  • Добавляем try/catch в коллекции Laravel
  • habr Laravel-Дайджест (15–21 июня 2020)
  • Статистика пакетов экосистемы Laravel
  • Большой тред с советами по написанию Laravel-приложений:

Yii


  • Интеграция Yii 2 и Doctrine ORM

Laminas


  • video Мертв ли Zend Framework? — На этот и другие вопросы отвечает лидер проекта Laminas — Matthew Weier O'Phinney.
  • asgrim/mini-mezzio — Быстрое создание приложения на Mezzio (экс Zend Expressive).

Async PHP


  • badfarm/zanzara — Асинхронный фреймворк для создания Telegram-ботов на базе ReactPHP.
  • simple-swoole/simps — Еще один фреймворк на базе Swoole. Судя по бенчмаркам самый быстрый из PHP.
  • video Видеокурс по ReactPHP от Marcel Pociot

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


  • Представляем новый серверлесс LAMP стек — Пост в блоге AWS об использовании PHP и подборка ресурсов по теме.
    Также для PhpStorm теперь доступен официальный плагин AWS Toolkit от Amazon.
  • Об объявлении свойств в конструкторе в PHP 8.
  • Какие функции PHP наиболее часто используются во фреймворках? — В Symfony это sprintf(), в Laravel — is_null(). Автор предоставил инструкцию, как подсчитать для других фреймворков.
  • О финальных классах в PHP.
  • habr Миллион за месяц: как запустить стартап в Европе своими силами.
  • habr Redis на практических примерах.
  • habr Беги, PHPUnit, беги: как я оптимизировал время выполнения тестов.
  • habr Самый быстрый шаблонизатор для PHP.

Аудио/Видео


  • video Видеозаписи всех докладов с PHP Russia 2020 Online
  • videoru Макс Рафалко, Принципы проектирования пакетов PHP
  • videoru Стрим Пятиминутка PHP по Laravel Livewire: сетевая игра (часть 5)
  • audioru Между скобок № 9: Александр Лисаченко — АОП в PHP.
  • audio PHP Internals News #58 — C Max Semenik о принятом RFC non-capturing catches.
  • audio PHP Internals News #57 — C Ralph Schindler о его предложении добавить return if ($condition): $returnValue;.
  • audio PHP Internals News #56 — С Dan Ackroyd о добавленном псевдотипе mixed.

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

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

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

Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 181

Источник: https://habr.com/ru/post/507636/


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

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

Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
В этом выпуске, конечно, у нас много материалов с WWDC — App Clips, виджеты, новый Xcode, macOS Big Sur, изменения в StoreKit, UIKit и SwiftUI. Кроме них стилизация, полезные инноваци...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4.0 RC5, Xdebug 2.8, критическая уязвимость в PHP-FPM, новости из PHP Internals, порция полезных инструментов, подкасты, стр...
В 2019 году люди знакомятся с брендом, выбирают и, что самое главное, ПОКУПАЮТ через интернет. Сегодня практически у любого бизнеса есть свой сайт — от личных блогов, зарабатывающих на рекламе, до инт...