PHP-Дайджест № 186 (3 – 17 августа 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Beta 1, снова о синтаксисе атрибутов в PHP 8: #[Attr] vs @[Attr], предложение по синтаксису для BigInt, обзоры PHP 8 и много других видео, инструменты, стримы, подкасты.

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



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


  • PHP 8.0.0 Beta 1 — С первым бета-релизом заканчивается фаза активной разработки, а значит список новых возможностей и изменений в ветке 8.0 можно считать финальным. (За исключением синтаксиса атрибутов). Следующая бета ожидается 20 августа.
  • PHP 7.4.9, 7.3.21, 7.2.33 — Секьюрити релизы актуальных веток с исправлением уязвимости в phar.
  • WordPress 5.5 “Eckstine” — Наконец-то добавлено автообновлением тем и плагинов, что поможет сделать установки CMS безопаснее.

PHP Internals


  • [RFC] Shorter Attribute Syntax Change — История с синтаксисом атрибутов в PHP 8 продолжается. О финальном голосовании было в канале, но позже оно было приостановлено из-за того, что не был соблюден регламент по 2х-недельному обсуждению.

    Tycon Andre привел примеры, не очень удачного поведения варианта #[Attr] в PHP 7. C другой стороны, какая разница, если остальные варианты просто отвалятся с ошибкой парсинга?

    И сравнение синтаксисов @@Attr, #[Attr], <<Attr>> и @[Attr]:
    Скрытый текст
    @@ORM\Entity
    @@ORM\Table("user")
    class User
    {
        @@ORM\Id @@ORM\Column("integer") @@ORM\GeneratedValue
        private $id;
    
        @@ORM\Column("string", ORM\Column::UNIQUE)
        @@Assert\Email(["message" => "The email '{{ value }}' is not a valid email."])
        private $email;
    }
    
    #[
      ORM\Entity,
      ORM\Table("user")
    ]
    class User
    {
        #[ORM\Id, ORM\Column("integer"), ORM\GeneratedValue]
        private $id;
    
        #[ORM\Column("string", ORM\Column::UNIQUE)]
        #[Assert\Email(["message" => "The email '{{ value }}' is not a valid email."])]
        private $email;
    }
    
    @[
      ORM\Entity,
      ORM\Table("user")
    ]
    class User
    {
        @[ORM\Id, ORM\Column("integer"), ORM\GeneratedValue]
        private $id;
    
        @[ORM\Column("string", ORM\Column::UNIQUE)]
        @[Assert\Email(["message" => "The email '{{ value }}' is not a valid email."])]
        private $email;
    }
    
    <<
      ORM\Entity,
      ORM\Table("user")
    >>
    class User
    {
        <<ORM\Id, ORM\Column("integer"), ORM\GeneratedValue>>
        private $id;
    
        <<ORM\Column("string", ORM\Column::UNIQUE)>>
        <<Assert\Email(["message" => "The email '{{ value }}' is not a valid email."])>>
        private $email;
    }
    
    @:ORM\Entity
    @:ORM\Table("user")
    class User
    {
        @:ORM\Id @:ORM\Column("integer") @:ORM\GeneratedValue
        private $id;
    
        @:ORM\Column("string", ORM\Column::UNIQUE)
        @:Assert\Email(["message" => "The email '{{ value }}' is not a valid email."])
        private $email;
    }
    
  • [RFC] Named Parameters explicit opt in — Документ был переделан и теперь вместо переименования параметров предлагает лишь явно указывать, что данный параметр именованный.
    // Именованный параметр включен явно
    function callBar(Foo $:parameterName) {
        $internalName->bar();
    }
    
    $x = new Foo();
    callBar(parameterName: $x);
    
    // Параметр не именованный
    function callBar($externalName) {
        $externalName->bar();
    }
    
    $x = new Foo();
    callBar(externalName: $x); // Error: cannot call function callBar() using parameter $externalName by name.
    
    Поскольку PHP 8 уже заморожен для новых фич, то данное предложение возможно только в 8.1, да и то маловероятно.
  • [Proposal] Bigint shorthand (123n) for GMP objects — Интересное предложение пока без официального RFC.

    Предлагается реализовать в PHP синтаксис для больших чисел аналогичный JavaScript с добавлением в конце суффикса «n»:
    $theBiggestInt = 9007199254740991n

    При этом под капотом будет использоваться GMP. А поскольку для объектов GMP уже перегружены арифметические операторы, а также битовые и сравнения, то работа с такими числами будет прозрачной.
  • В рамках дискуссии на тему улучшения интерактивного шелла PHP (php -a), предложен PR, который позволит задавать колбэк отрабатывающий на вывод из интерактивного шелла. Или пока можно использовать bobthecow/psysh.
  • cross [RFC] PHP Namespace Policy — Отклонен.

Инструменты


  • PHPUnit 9.3 — C поддержкой PHP 8 и Xdebug 3.
  • sebastianbergmann/cli-parser — Микропакет для парсинга аргументов командной строки, выделенный из PHPUnit.
  • coduo/php-matcher — Валидация данных по паттернам для тех, кто не хочет в регекспы.
  • phpfn/phpfn — Функциональные примитивы от SerafimArts.
  • hidehalo/nanoid-php — PHP-реализация Nanoid — безопасного URL-совместимого генератора уникальных идентификаторов.
  • woohoolabs/zen — Простой PSR-11-совместимый контейнер с генератором файла предзагрузки.
  • loophp/collection — Легковесные коллекции.

Symfony


  • mrsuh/json-validation-bundle — Бандл для валидации JSON запроса/ответа по json-schema.org.
  • Деплоим Symfony-приложение на AWS Lambda
  • habr SSR: рендеринг ReactJS приложения на бекэнде используя PHP.

Laravel


  • Очереди Laravel: Запуск одной и той же джобы несколько раз.
  • video Не используйте защиту от массового присваивания в ваших моделях Laravel.
  • video Better Laravel Way — Несколько видео по фреймворку на разные темы.
  • habr Laravel-Дайджест (10–16 августа 2020)

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


  • Тестирование микросервисов на PHP с помощью Codeception.
  • Как работают статические анализаторы PHP-кода.
  • Антипаттерны в легаси приложениях на PHP.
  • Method fossilisation — О проблемах переопределения наследуемых методов.
  • PHP-пакеты как зависимости уровня системы.
  • KPHPStorm — Около 7 лет назад ребятки и ВКонтакте выложили код своего транслятора KPHP. C тех пор новостей о нем особо не было.

    Представление о том, как выглядит KPHP сейчас можно сделать, посмотрев на плагин для PhpStorm, который опубликовали разработчики.

    Код плагина открыт github.com/unserialize/kphpstorm.
  • Дружественные классы в PHP — Когда-то был RFC на эту тему, но он не прошел голосование.
  • habr Как создаются Highload проекты на PHP: расшифровка.
  • habr PHP 8: код «До» и «После» (сравнение с PHP 7.4)
  • habr Как я html-парсер на php писал, и что из этого вышло. Заключительная часть
  • habr Запускаем php 8 с JIT через Docker за 5 минут

Аудио/Видео


  • video PHP 8: Process & fixing insanity — Обзор PHP 8 от одного из core-контрибьюторов George Peter Banyard. Еще раньше уже был подобный доклад от Никиты Попова, а также от от William Pinaud.
  • video Type Juggling Magic: Why PHP thinks 0 and «password» are the same — Забавное видео о том, как приведение типов в PHP может привести к проблемам безопасности.
  • video Видеозаписи докладов Dutch PHP Conf 2020
  • videoru Стрим «Примеры проектов на PHP и GO» с разбором пары проектов на PHP и Go и обсуждением типичных проблем.
  • audioru Пятиминутка PHP #82: О переходе на declare(strict_types=1).
  • audioru Пятиминутка PHP #83: Объекты передаются по ссылке или нет?
  • audio Подкаст Voices of the ElePHPant: — Интервью с релиз-менеджерами PHP 8 Sara Golemon и Garbriel Caruso — все про предстоящий релиз.
  • audio Подкаст PHP Internals News #66 — С Никитой Поповым про использование одного токена для всего неймспейса в PHP 8 и парсинге PHP в целом.
  • audio Подкаст PHP Internals News #65 — С Dan Ackroyd про новый оператор ?-> в PHP 8.

Занимательное


  • www.elephpant.com — Оригинальных слоников синего и розового цвета можно будет заказать, написав автору их дизайна Vincent Pontier.

    Серые и черные также есть в магазине Symfony shop.symfony.com — теперь с доставкой по всему миру.



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

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

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

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

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


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

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

Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Этот пост будет из серии, об инструментах безопасности, которые доступны в Битриксе сразу «из коробки». Перечислю их все, скажу какой инструмент в какой редакции Битрикса доступен, кратко и не очень р...
Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4.0 RC1, Laravel 6, Monolog 2 и другие релизы, Union Types и прочие новости из PHP Internals, порция полезных инструментов, ...
Очередной выпуск рассказывает про морок функционального программирования, солидный Swift для солидных программистов, дорожную карту Android-разработки, стабильность модного приложения, путаницу п...
С версии 12.0 в Bitrix Framework доступно создание резервных копий в автоматическом режиме. Задание параметров автоматического резервного копирования производится в Административной части на странице ...