PHP-Дайджест № 177 (23 марта – 6 апреля 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: расписание релиза PHP 8, анализ эргономики объектов в PHP и 5 свежих RFC из PHP Internals, немного полезных инструментов, видео, подкасты и многое другое.

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



PHP Internals


  • Опубликовано Расписание релиза PHP 8 — Первая альфа ожидается 18 июня, а финальный релиз 3 декабря. Подробнее.
  • [RFC] Constructor Property Promotion — Ларри Гарфилд опубликовал подробный анализ эргономики объектов в PHP, в котором делает вывод, что лучше всего было бы сфокусировать на 3х RFC: Constructor Promotion, Named parameters, Compound Property Visibility (раздельное указание модификаторов доступа для чтения и записи {public get, private set}).
    И вот по следам анализа, в данном RFC предлагается разрешить объявлять свойства прямо в конструкторе:
    Вместо такого
    class Point {
        public float $x;
        public float $y;
        public float $z;
    
        public function __construct(
            float $x = 0.0,
            float $y = 0.0,
            float $z = 0.0
        ) {
            $this->x = $x;
            $this->y = $y;
            $this->z = $z;
        }
    }
    
    Можно будет писать:
    class Point {
        public function __construct(
            public float $x = 0.0,
            public float $y = 0.0,
            public float $z = 0.0
        ) {}
    }
    
  • [RFC] Allow trailing comma in parameter list — Ну и в дополнение к предыдущему, предлагается разрешить использовать запятую после последнего параметра в определении функции. Для списка аргументов при вызове функции это уже работает начиная с PHP 7.3.
    Скрытый текст
    class Uri {
        private function __construct(
            ?string $scheme,
            ?string $user,
            ?string $pass,
            ?string $host,
            ?int $port,
            string $path,
            ?string $query,
            ?string $fragment // <-- ARGH!
        ) {
            ...
        }
    }
    
  • [RFC] Stricter type checks for arithmetic/bitwise operators — Этот RFC предлагает выдавать ошибку TypeError, когда арифметический или побитовый оператор применяется к массиву, ресурсу или объекту.
    var_dump([] % [42]);
    // int(0)
    // WTF?
    
  • [RFC] Switch expression — Предлагается разрешить использовать switch в качестве выражения, а не только как управляющую конструкцию:
    $expressionResult = switch ($condition) {
        1 => foo(),
        2 => bar(),
        3, 4, 5 => baz(),
    };
    
    Также RFC предлагает разрешить перечисление возможных значений в секциях case: case 3, 4, 5: break; вместо case 3: case 4: case 5: break;.
  • [RFC] Type casting in array destructuring expressions — Предлагается сделать возможным использование приведения типов при деструктурировании массивов:
    [(int) $now, (int) $future] = ["2020", "2021"];
    
    // По сути то же, что и
    [$now, $future] = ["2020", "2021"];
    $now = (int) $now;
    $future = (int) $future;
    

    Николас Грекас в Твиттере приводит примеры возможного использования такой функциональности, а именно имитации именованных параметров:
    ...[int $i] = ['a' => '123'];
    
    function foo(...[int $i]) {
    }
    
    foo(['a' => '234']);
    
    и быстрого объявления типизированных вложенных структур:
    $var = (Foo) [
        'a' => 123,
        'b' => (Bar) [
            'c' => // ...
        ],
    ];
    
  • Отклонены по результатам голосования: Server-Side Request and Response Objects, Userspace operator overloading, Write-Once (readonly) Properties.

Инструменты


  • TitasGailius/terminal — Красивая обёртка над symfony/process для запуска внешних команд из PHP.
  • rlanvin/php-ip — Библиотека для работы с IPv4/IPv6 на PHP, вдохновлённая ipaddress из Python.
  • ramsey/collection — Реализация коллекций вдохновлённая Java.
  • clue/graph-composer — Инструмент визуализирует связи между composer-пакетами вашего проекта.

Symfony


  • Неделя Symfony #692 (30 марта — 5 апреля 2020)
  • ru Обзор компонента symfony/messenger.
  • habr Временная локализация на Symfony 4 + Twig.

Laravel


  • 6 секретов Laravel Eloquent для улучшения кода.
  • Сложные формы с помощью Laravel Livewire.
  • ru Всё о валидации в Laravel.
  • ru Blade компоненты в Laravel 7.
  • habr Используем трейты для полиморфных связей в Laravel.
  • habr Небольшие хитрости для тестирования веб-приложений на Laravel с использованием Model Factories.

Yii


  • ru Новости Yii 2020, выпуск 3

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


  • О тестировании без мок-фреймворков.
  • О паттерне Circuit Breaker и использовании ackintosh/ganesha.
  • Функциональные тесты и ускорение создания схемы БД.
  • О проблемах паблик свойств и методов и как их «приватизировать» с помощью rectorphp/rector.
  • О разработке с использованием флагов фич (фиче-флагов?).
  • Разбор уязвимости в ImpressCMS или почему не стоит доверять $_SERVER['PHP_SELF'].
  • SerafimArts/opengl-demo — Демо использования OpenGL (SDL) на чистом PHP через FFI. (!)
  • habr Капча для CodeIgniter 4 (и не только).
  • habr Проблемы использования Doctrine ODM в процессах-демонах.
  • habr Spiral: высокопроизводительный PHP/Go фреймворк.

Аудио/Видео


  • videoru Запись большого онлайн-митапа по PHP: про легаси, монолиты, CQRS, GraphQL, редкие утилиты и вредные советы разработчику Васе.
  • audio PHP Internals News: Episode 47: Attributes v2 — С Benjamin Eberlei об аннотациях в PHP и RFC Attributes v2. Радует, что над потенциальной реализацией идёт активная работа.
  • audio PHP Internals News: Episode 46: str_contains() — C Philipp Tanlak о добавленной str_contains() благодаря его RFC.
  • audioru Пятиминутка PHP № 76: Как провести собеседование PHP разработчика middle-уровня?
  • audioru Между скобок №2: Антон Морев о GraphQL.

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

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

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

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

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


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

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

Подборка свежих уроков, видео и пакетов по фреймворку Laravel за неделю. Читать дальше →
Прим. перев.: это перевод статьи, подготовленной по мотивам недавнего выступления Richard Hartmann — заметного представителя команды разработчиков Prometheus, директора по сообществам...
Тренды в OpenStreetMap: среди стран, городов и тем 1 | Pascal Neis | map data OpenStreetMap contributors Картографирование Русс Гарретт, разработчик сайта OpenInfraMap, опуб...
Всем привет! Я Алексей Тимин, отвечаю за техническую часть системы локализации в Badoo. У нас 150 000 фраз и текстов, переведённых на 52 языка для нескольких приложений. У каждого приложен...
Свежая подборка со ссылками на новости и материалы. В выпуске: Zend Framework переходит под крыло Linux Foundation, новости из PHP Internals, порция полезных инструментов, и многое другое. П...