PHP-Дайджест № 173 (27 января – 10 февраля 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 9 и другие релизы, 3 свежих RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое.

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



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


  • Developer Ecosystem Survey 2020 — Опрос разработчиков от JetBrains. Раздел PHP обновили. В нём также есть вопросы относительно направления развития PHP, результаты которых будут обсуждаться на встрече PHP Internals.
  • Ближайшие мероприятия:
    • Москва, 15 февраля: Badoo PHP Meetup #4. Легаси
    • Воронеж, 17 февраля: Первая встреча PHP-чата (с докладами)
    • Санкт-Петербург, 28 февраля: SymCode-митап, TBA
    • Ростов-на-Дону, 29 февраля: 3-й PHP-митап городского чата

    • PHP Russia 2020 — К уже подтверждённым докладчикам добавился Nicolas Grekas. Для читателей дайджест есть промокод со скидкой 7%: PHPDIGEST.
    • skyeng/php-communities — Открытый список PHP-событий, спикеров и организаторов.

PHP Internals


  • [RFC] Allow function calls in constant expressions — Сейчас в объявлениях констант можно использовать только литералы, константы и операции. В этом RFC предполагается добавить возможность вызова глобальных функций (всех или подмножество) в объявлениях констант, значений по умолчанию статических свойств, статических переменных и значений по умолчанию параметров.
    Скрытый текст
            class MyClass {
            const VALUES = [1, 0];
            const C1 = count(self::VALUES);
    
            public static $p = count(self::VALUES);
    
            public function foo($param = count(self::VALUES))
            {
            static $bar = count(self::VALUES);
            }
            }
            
  • [RFC] __toArray() — Предлагается добавить новый магический метод __toArray(), который будет вызываться при явном приведении объекта к массиву, когда объект передаётся в качестве параметра функции с типом array или когда возвращается с указанием return type array.
    Скрытый текст
            class Person
            {
            protected $name;
            protected $email;
            public function __toArray()
            {
            return [
            'name' => $this->name,
            'email'  => $this->email,
            ];
            }
            }
    
            $person = new Person('John Doe', 'j.doe@example.com');
    
            $personArray = (array) $person; // вызывает __toArray()
    
            function foo(array $person) {
            var_dump($person); // Здесь массив
            }
    
            function bar(Person $person): array {
            return $person;
            }
    
            var_dump(bar($person)); // и здесь массив
            
  • [RFC] Userspace operator overloading — Рассматривается возможность реализовать перегрузку операторов в PHP. Предложение пока в статусе черновика, но активно обсуждается в Internals. А тем временем перегрузку операторов можно использовать в PHP 7.4 на основе lisachenko/z-engine.
  • [RFC] Validation for abstract trait methods — Сигнатуры абстрактных методов из трейтов не валидируются на соответствие реализации. То есть вот такой код сейчас работает без ошибок:
    Скрытый текст
            trait T {
            abstract public function test(int $x);
            }
    
            class C {
            use T;
    
            // Работает сейчас, но не должно из-за несоответствия типов
            public function test(string $x) {}
            }
            

    Предлагается исправить это поведение.
    Ранее было опубликовано в виде пул-реквеста, но присутствует обратная несовместимость, которая требует пройти через RFC-процесс: если в текущем коде объявлен реализован абстрактный метод из трейта с другой сигнатурой, то изменение вызовет ошибку.
  • Предложения на голосовании: Static return type, Variable Syntax Tweaks, Allow ::class on objects, declare(function_and_const_lookup='global')
  • Дженерики в PHP — Никита Попов опубликовал результаты исследования возможности реализации дженериков в PHP.
  • php/doc-en — Документацию PHP на английском теперь можно редактировать через пул-реквесты на GitHub вместо старого редактора edit.php.net.

Инструменты


  • PHPUnit 9 — Требует PHP 7.3+ и использует больше современных фишек PHP, а также содержит ряд обратно несовместимых изменений. Подробнее в инструкции по апгрейду.
  • php-ai/php-ml — Библиотека для машинного обучения на PHP. Документация на русском.
  • salsify/jsonstreamingparser — Потоковый парсер JSON для работы с большими файлами. Прислал @IssecMura.
  • spatie/docker — Микрообёртка для запуска контейнеров и выполнения команд из PHP.
  • kitetail/zttp — HTTP-клиент (обёртка над Guzzle) с простым интерфейсом для типичных задач.
  • lisachenko/immutable-object — Реализация неизменяемых (Immutable) объектов на основе lisachenko/z-engine требует PHP 7.4 и FFI.
  • symfony/polyfill-php80 — Полифил PHP 8.0.
  • paratestphp/paratest — Пакет для распараллеливания тестов PHPUnit. Совместим с PHPUnit 9.

Symfony


  • Неделя Symfony #684 (3-9 февраля 2020)

Laravel


  • haruncpi/laravel-log-reader — Пакет для красивого отображения логов в админке.
  • calebporzio/sushi — Позволяет описать набор данных (строк таблицы) прямо в виде массива в свойстве модели и потом использовать, как если бы это были данные из базы. (Под капотом создаёт SQLite).
  • Использование примесей (mixin) в Laravel
  • Laravel больше чем CRUD: 09. О тестовых фабриках.
  • audio Подкаст Тейлора: Laravel Snippet #22 — О Laracon Online, Inertia.js, Livewire, SPAs и др.
  • habr CLI интерфейс для Laravel Artisan
  • ru Книга «Архитектура сложных веб-приложений. С примерами на Laravel».

Async PHP


  • video Сергей Жук беседует с Marc Morera — автором (DriftPHP) об асинхронном PHP.
  • driftphp/awesome-reactphp — Подборка полезных ресурсов и инструментов по ReactPHP.

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


  • Новое в PHP 8
  • Type matching in PHP — Реализация аналога конструкции match из Rust на PHP с помощью стрелочных функций.
  • Enums without enums in PHP — Идея имитации перечислимого типа с помощью анонимных классов.
  • О том как писать PHPDoc для массивов — В PhpStorm можно использовать плагин deep-assoc-completion.
  • Об аспектно-ориентированном программировании в PHP с использованием Go!AOP.
  • Redux в 30 строк на PHP
  • Были опубликованы эксплоиты, которые используют уязвимость в обработке ini-опции disable_functions. Доступен интересный разбор этого класса уязвимостей.
  • habr Разработка приложений и Blue-Green deployment опираясь на методологию The Twelve-Factor App с примерами на php и docker.
  • habr Работа с IPv6 в PHP
  • habr Железо или оптимизация? Badoo, Авито и Мамба — о производительности PHP
  • habr Эволюция обработки вебхуков Facebook: с нуля до 25 000 в секунду

Аудио/Видео


  • video Большой видеокурс по Event Sourcing
  • video О снэпшот-тестирования с PHPUnit — и spatie/phpunit-snapshot-assertions.
  • video Видеозаписи PHPKonf 2019 — Интересный доклад Midori Koçak о том, как предложить свою идею для PHP чтоб её приняли.
  • audio The Undercover ElePHPant #7 — С автором monolog Jordi Boggiano о логировании в продакшене и в целом о лучших практиках логирования.
  • audio PHP Internals News #38 — О предзагрузке и WeakMaps с Никитой Поповым. (Теперь с текстовой расшифровкой).
  • audio PHP Internals News #39 — Об интерфейсе Stringable с Nicolas Grekas, который, кстати, будет на PHP Russia в этом году.

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


  • bragful/ephp — Интерпретатор PHP на чистом Erlang.
  • Xdebug cloud — На video конференции SunshinePHP (на 47:45) Derick Rethans рассказал о новом проекте, цель которого упростить настройку Xdebug, особенно в случаях, когда могут быть трудности с сетью (Docker, удалённый сервер и тп). По сути – прокси.
  • PhpQuiz — Telegram-канал, на котором публикуются задачи по PHP, архитектуре, PSR-стандартам и фреймворкам.

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

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

Telegram-канал: PHP Digest.

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

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


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

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

Подборка свежих уроков, видео и пакетов по фреймворку Laravel за две недели. Читать дальше →
Свежая подборка со ссылками на новости и материалы. В выпуске: Composer 2.0 Alpha и другие релизы, 5 новых и одно принятое RFC предложение из PHP Internals, а также обновленные атрибуты на голо...
Это открыто – „Ça reste ouvert“ 1 | caresteouvert.fr/mentions-legales CC-BY-SA | map data OpenStreetMap contributors Картографирование Сёрен Райнеке хочет, чтобы в OSM была единая схема...
Те, кто собираются открывать интернет-магазин, предварительно начитавшись в интернете о важности уникального контента, о фильтрах, накладываемых поисковиками за копирование материалов с других ресурсо...
В «1С-Битрикс» считают: современный интернет-магазин должен быть визуально привлекательным, адаптированным для просмотра с мобильных устройств и максимально персонализированным с помощью технологии Бо...