
Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 8 и другие релизы, PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка свежих RFC из PHP Internals, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PSR-14 Event Dispatcher — официально перешёл в стадию ревью.
- PSD-12 Extended Code Style — Новый стандарт стиля кодирования расширяет и дополняет PSR-2 и призван заменить его. Тоже в стадии ревью.
- PHP 7.3.2
- PHP 7.2.15
- PHPUnit 8
PHP Internals
- Создана ветка PHP-7.4, а master репозитория PHP теперь нацелен на PHP 8.0. Это значит, что работа над PHP 8.0 уже стартовала, а PHP 7.4 будет разрабатываться параллельно. Так, в PHP 8 уже удалена целая пачка устаревших возможностей.
- [RFC] JIT — Старая идея с JIT в PHP наконец-то нашла реализацию благодаря усилиям Дмитрия Стогова. JIT реализован как независимая часть OPcache, и может быть включён/выключен даже в рантайме. В качестве целевой версии рассматривается PHP 8, но возможно включение уже в PHP 7.4 в виде экспериментальной отключенной по умолчанию фичи. По бенчмаркам Никиты Попова JIT даёт прирост 30% для PHP-Parser и около 5% для amphp/http-server. На данный момент нет поддержки Windows, что вызывает споры в Internals.
А тем временем уже можно попробовать PHP+JIT с помощью Docker образов (спасибо @dmitrybalabka). Также в тему отличный пост о том, что значит JIT для пользователей PHP. - [RFC] Consistent type errors for internal functions — Еще один RFC от Никиты Попова. Предлагается сделать так, чтоб в PHP 8 все встроенные функции бросали TypeError когда переданы параметры неверного типа вместо ворнингов и возвращения
null.Скрытый текстВместо:var_dump(strlen(new stdClass)); // Warning: strlen() expects parameter 1 to be string, object given // NULL
Будет:
declare(strict_types=1); var_dump(strlen(new stdClass)); // TypeError: strlen() expects parameter 1 to be string, object given
- [RFC] RFC Workflow & Voting (2019 update) — Попытка несколько ужесточить голосование по RFC и бюрократизировать процесс встретила бурю критики в Internals. Настолько, что появились альтернативные предложения. Свой же вариант Зеев Сураски пообещал переработать и учесть критику.
- [RFC] Weak References — Предлагается добавить класс
WeakReferenceдля реализации слабых ссылок, что позволит разработчику с��хранить ссылку на объект, при этом не предотвращая его удаления сборщиком мусора. Это может быть особенно полезно для всякого рода кэшей. - [RFC] Allow void return type variance — Предложение реализовать возможность переопределять возвращаемый тип
voidв методах наследника. Появилось по следам изменения сигнатуры методаsetUp()и нескольких других в PHPUnit 8.Скрытый текстclass Foo { function method1 (): void {} function method2 () {} } class Bar extends Foo { function method1 (): array { return []; } function method2 (): array { return []; } } class Baz extends Foo { function method1 () { return 42; } function method2 () { return 42; } } - [RFC] Mixed typehint — А здесь предлагается добавить тайпхинт
mixed. Это позволит указать, что функция может принимать (или возвращать) значения разных типов. - [RFC] Annotations 2.0 — Черновик предложения по полноценным аннотациям. Ранее уже были попытки реализовать простые аннотации и атрибуты. Тем временем можно использовать отличный плагин для аннотаций в PhpStorm.
Инструменты
- mnapoli/bref v0.3 — Инструмент для создания serverless PHP-приложений на AWS Lambda. В свежей версии убран хак с запуском через NodeJS. В качестве альтернативы можно использовать img2lambda.
- paragonie/ciphersweet — Бы��трое шифрование для PHP-проектов с возможностью поиска по данным. Больше деталей в посте.
- phpdaily/php — Docker-образы дев-версий PHP, включая PHP 7.4 и PHP 8.
- immutablephp/immutable — Неизменяемые объекты-значения. Вводный блогпост.
- spatie/enum — Еще одна реализация перечисляемого типа для PHP.
- krakjoe/pcov — Драйвер для быстрого подсчета покрытия кода. Подробнее в посте.
- krakjoe/sandbox — Расширение позволяет запускать замыкание в песочнице. Больше деталей в блогпосте.
- akondas/php-grandmaster — Движок шахмат на PHP, с примером деплоя на AWS Lambda.
- railt/railt — Реализация GraphQL для PHP-приложений.
- SerafimArts/Properties — Реализация свойств в PHP на основе деклараций PHPDoc.
Symfony
- Неделя Symfony #632 (4-10 февраля 2019)
- Неделя Symfony #631 (28 января — 3 февраля 2019)
- О паре файлов, которых не хватает вашему Symfony-приложению: ide-twig.json и .phpstorm.meta.php.
- Создатель Symfony Fabien Potencier ответил на вопросы пользователей о фреймворке, PHP, и прочем.
Сериализация данных на уровне базы
Laravel
- brendt/aggregate.stitcher.io — Хороший пример приложения на Laravel.
- beyondcode/laravel-favicon — Генерирует фавиконку на основе установок окружения, чтоб не путать дев и прод.
- 11 вспомогательных функций для Laravel
Подкаст от Тейлора Laravel Snippet #4 и #5
Видеозаписи Laracon EU 2018
Yii
Yii 2.0.16- Yii development notes #26
- iiifx-production/yii2-autocomplete-helper — Автодополнения в IDE для пользовательских компонентов Yii 2.
Неочевидный RabbitMQ в Yii2 или почему RabbitMQ пишет во все очереди сразу.
Async PHP
- reactphp/event-loop v1.1.0 — Добавлена поддержка libuv (ext-uv), обработка PCNTL-сигналов, использование
hrtime()на PHP 7.3+. - shuchkin/react-smtp-client — Асинхронный SMTP-клиент для отправки почты с помощью ReactPHP.
Быстрый веб-скрапинг на ReactPHP #3: Скачиваем изображения
CMS
Материалы для обучения
- Выявление багов с помощью @template — О поддержке дженериков в статических анализаторах vimeo/psalm, и phan.
- Контекстные менеджеры в PHP — Интересная идея реализовать аналог контекстных менеджеров из Python с помощью генераторов в PHP.
- Переход с Go обратно на PHP

Видеозаписи Onliner PHP Meetup #3
PHP для начинающих. Сессия
Composer для самых маленьких
Что почитать по PHP на русском?
BotMan знакомство
Паттерн Интерактор (Interactor, Operation)
Liveprof покажет, когда и почему менялась производительность вашего PHP-приложения
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новосте�� и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 148
