Свежая подборка со ссылками на новости и материалы. В выпуске: 4 принятых RFC предложения для PHP 8, включая атрибуты (аннотации / декораторы), порция полезных инструментов, онлайн-конференции и митапы, видео, подкасты и многое другое.
Приятного чтения!
Новости и релизы
- PHP Russia Online, 13 мая — Конференция будет бесплатной благодаря Badoo. В программе запланировано 7 докладов от Chris Holland, Tobias Nyholm, Anna Filina, Markus Winand, Andreas Heigl, Антона Титова и Nicolas Grekas. Для всех докладов будет доступен поток с синхронным переводом на русский от Skyeng.
- PHP fwdays'20 — Тоже пройдет в онлайн-формате в течение двух дней 30 и 31 мая.
- Fwdays PHP online meetup — 19 мая 2020, 19:00–21:00 UTC+3, бесплатный онлайн-митап из двух докладов на английском.
PHP Internals
- [RFC] Attributes v2 — В PHP 8 будут добавлены полноценные атрибуты (аннотации / декораторы) с синтаксисом угловых скобок
<< >>
.
Скрытый текст<<ExampleAttribute>> class Foo { <<ExampleAttribute>> public const FOO = 'foo'; <<ExampleAttribute>> public $x; <<ExampleAttribute>> public function foo(<<ExampleAttribute>> $bar) { } } $object = new <<ExampleAttribute>> class () { }; <<ExampleAttribute>> function f1() { } $f2 = <<ExampleAttribute>> function () { }; $f3 = <<ExampleAttribute>> fn () => 1;
Также будет возможность использовать атрибуты этапа компиляции. В качестве примера Benjamin Eberlei приводит атрибут<<Deprecated>>
, который добавляет вызовtrigger_error
в тело декорируемой функции:
<<Deprecated>> function test() {} // Deprecated: Function test is deprecated in %s <<Deprecated("use test3() instead")>> function test2() {} // Deprecated: Function test2 is deprecated use test3() instead in %s
- [RFC] Allow trailing comma in parameter list — В PHP 8 можно будет использовать запятую после последнего параметра в определении функции.
Скрытый текстclass Uri { private function __construct( ?string $scheme, ?string $user, ?string $pass, ?string $host, ?int $port, string $path, ?string $query, ?string $fragment, // <-- ! ) { ... } }
- [RFC] Change Default PDO Error Mode — Дефолтный режим для ошибок в PDO будет установлен как
PDO::ERRMODE_EXCEPTION
и в случае ошибок SQL будут бросаться исключения. - [RFC] Stricter type checks for arithmetic/bitwise operators — Предложение принято, и в PHP 8 будет брошена ошибка
TypeError
, когда арифметический или побитовый оператор применяется к массиву, ресурсу или объекту. - [RFC] Type casting in array destructuring expressions — Отклонено.
- [RFC] Always available JSON extension — Предлагается сделать расширение JSON всегда доступным без возможности исключить из сборки.
- [RFC] Match expression — Голосование по добавлению выражения
match
склоняется в сторону отклонения в текущем виде, потому что многим не нравится возможность использовать блоки:
match ($x) { 0 => { foo(); bar(); baz(); }, }
Но, поскольку до feature-freeze в PHP 8 еще три месяца, то есть шансы обновить RFC и выставить его на повторное голосование.
Инструменты
- Deji69/encase-matching — Паттерн-мэтчинг для PHP в виде библиотеки. На случай если RFC не пройдет и со второй попытки.
- brick/math — Библиотека для работы с числами произвольной точности. Будет работать, даже если не уставлены GMP или BCMath, а если они есть, то выберет наиболее быструю реализацию.
- villfa/composer-substitution-plugin — Плагин для Composer, который заменяет плейсхолдеры в секции скриптов на динамические значения.
- async-aws/aws — Легковесная и асинхронная альтернатива официальному SDK для AWS.
- sensiolabs-de/deptrac 0.7 — Инструмент статического анализа кода для определения зависимостей между слоями приложения.
- rybakit/phpunit-extras — Кастомные аннотации и методы
expect*()
для PHPUnit, чтобы сделать тесты чище. - LongRunning/LongRunning — Набор мелких, но полезных решений для long-running приложений на PHP (закрытие соединений, буферов, и тп).
Symfony
- Детальный обзор изменений компонента Security из Symfony 5.1 от одного из контрибьюторов.
- Предложение добавить новый компонент symfony/runtime, который позволит гибко отделять PHP-приложения от глобального состояния, благодаря новому интерфейсу
RuntimeInterface
. - Как переиспользовать код с бандлами Symfony 5? Часть 1. Минимальный бандл, Часть 2. Выносим код в бандл, Часть 3. Интеграция бандла с хостом: шаблоны, стили, JS, Часть 4. Расширение бандла в хосте, Часть 5. Конфигурация.
- Неделя Symfony #696 (27 апреля — 3 мая 2020)
Laravel
- spatie/laravel-dashboard — Инструмент для создания дашбордов на Laravel и Livewire. Вводный туториал и видеообзор.
- О реализации мультисайта (multitenant) на Laravel: миграции, тестирование, переключение сайтов.
- Вводный туториал по валидаторам ресурсов.
- Видеозаписи с зимнего Laracon Online 2020.
- Динамические отношения с использованием подзапросов.
- Продвинутая система авторизации действий с ресурсами в Laravel. Часть 3. Чтение/запись атрибутов, собственные модели.
- Создание собственного пакета для Laravel Nova: OptimalImage.
- SOA на Laravel и JSON-RPC 2.0.
- Архитектура сложных веб-приложений. С примерами на Laravel. — Книга полностью закончена и доступна для чтения онлайн и скачивания.
Yii
- Новости Yii 2020, выпуск 4.
- yiisoft/injector — Еще один компонент из экосистемы Yii 3. PSR-11-совместимый инжектор позволяет создавать объекты вместе с зависимостями через автоподключение (autowiring).
- bizley/yii2-migration — Генерирует миграцию на основе текущего состояния базы и предыдущих миграций. В последней версии добавлена поддержка схем PostgreSQL.
- Подробнейший туториал по Yii2 с нуля продолжительностью 7 часов на примере создания простого аналога YouTube.
Async PHP
- Сравнение асинхронных HTTP-клиентов Amphp vs. ReactPHP vs. Guzzle: результаты.
- Внутренности ReactPHP: Таймеры цикла событий.
Материалы для обучения
- Composer 2 Development Update — Если вы еще не успели попробовать альфу второй версии композера, то пока можно прочитать обзор изменений. Для разработчиков плагинов есть информация по обновлениям экосистемы.
- О времени высокой точности или как использовать доли секунды в MySQL и PHP.
- Как правильно шарить правила для PHP-CS-Fixer в команде.
- Статические конструкторы в PHP.
- Сочетание ивент-сорсинга и традиционного подхода в одном приложении.
- Подборка реальных схем баз данных из опенсорсных приложений — Может быть полезно в качестве вдохновения при проектировании своего приложения.
- Автономизация Unit-тестов в PHPUnit.
- Как раскатывать опасный рефакторинг на прод с миллионом пользователей?
- PSR Стандарты.
Аудио/Видео
- PHP Internals News #51 — С Larry Garfield об эргономике объектов в PHP по следам его блог поста.
- PHP Town Hall Episode 74 — С создателями Composer Jordi Boggiano и Nils Adermann об истории инструмента и том, что остается за кадром.
- Как использовать Git Stash в PhpStorm.
- Подкаст «Между скобок» № 5, 6 — С Алексеем Корнеевым из Skyeng об организации PHP-сообществ и проведении митапов.
- MoreView #5 — В гостях Сергей Жук, автор книг и скринкастов по ReactPHP.
- MoreView #6 — С Алиной Романовой, devrel в Badoo.
- Запись онлайн PHP-митапа от PHPofBy и Skyeng.
- Пятиминутка PHP № 77 — Как выглядят онлайн-конференции и как они будут выглядеть в будущем? C Олегом Буниным, организатором HighLoad++, РИТ++ и PHP Russia.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 178
std00
Жаль, что @ не получилась. Выглядит как то не очень.
OnYourLips
На самом деле имхо выглядят оба нормально: не уродливые и логичные.
Меня гораздо больше печалит, что дженерики и в эту мажорную версию не завезли.
std00
Про дженерики поддерживаю, будет зоопарк скобок если дальше завезут, ну или придется все перепиливать. А @ как мне кажется уже знакома всем и не мазолит глаз.
Hett
Дженерики через @ сделают
SerafimArts
*пока что
С другой стороны, в подавляющем большинстве (во всех) языков с ними проблема. Не только с типами, но и с синтаксисом. Давайте попробуем угадать по вызову какая из деклараций функций будет корректной?)
amberovsky
Не вижу проблем с дженериками, есть некоторая специфика в зависимости от типа дженериков.
Первый случай некорректен всегда, даже в java. (прим: некорректен не означает ошибку)
Во втором случае не могу представить, как это сработает? Прототип функции имеет 2 аргумента, а передаётся 1.
SerafimArts
Увы, пока что RFC нет, именно по-этому я в первом случае указал обобщённый тайпхинт.
Ну почему же? Первое — это выражение
new Example < A
, а второй — выражениеB > $c
. Или не так?amberovsky
Вы про какой RFC? Мы же про языки с уже добавленными дженериками говорим?
Ха, отличная попытка использовать пример из презентации, но нет :)
Example < A имеет тип boolean, в php автобоксинга нет и new bool вывалится с ошибкой.new имеет более высокий приоритет, но мне кажется вам не удастся написать валидный php код для второго случая (как минимум — переменные должны быть с $, а константы тоже в пхп хитрые)SerafimArts
Про PHP. RFC есть в драфте, но очень далёк от того за что можно начать голосовать: https://wiki.php.net/rfc/generics
Так как PHP дженерики (из реализации https://github.com/PHPGenerics/php-generics-rfc) синтаксически выглядят идентично джавовским, то это отличный пример того, почему с ними так всё долго. Подробнее, к слову, можно почерпнуть из ишью Никиты: https://github.com/PHPGenerics/php-generics-rfc/issues/45
Ой ли? Я добавил всего лишь определения для каждой из используемых переменных/констант/классов, остальное оставил без изменений. Более того, подобный вопрос уже обсуждался (я не из головы брал: https://github.com/PHPGenerics/php-generics-rfc/issues/35). Ну и нотисы убрал, дабы ещё веселее выглядело.
sanerrus
Вот здесь написано, что синтаксис еще будет осуджаться и есть предложение сделать через @
pronskiy Автор
Через
@:
и уже все обсудили и проголосовали.sanerrus
Да, извините, видел уже Вы писали, пропустим мимо глаз перед тем как отправить комментарий.
dmz9
выглядит чертовски уродливо.
интересно видеть как язык спотыкается об свои же архитектурные решения столетней давности — @ уже есть как оператор error suppression, в рфц это есть в последней части Criticism and Alternative Approaches.
вот так думаешь это препроцессор для хтмл, а через дцать лет оказывается уже нужны аннотации )))
SerafimArts
Рекомендую посмотреть доклад Бреслава на эту тему. Хоть и про Джаву, но проблемы те же самые. Я раза 3-4 этот доклад пересматривал, очень крутой: www.youtube.com/watch?v=HE4yyPpUsy4
Maksclub
вкусно рассказывает, спасибо
dmz9
и с какой целью я должен его посмотреть? чтобы с чем то смириться или поменять свою точку зрения? или перестать считать что то уродством только потому что «таков путь»? ))
SerafimArts
Я не знаю при чём тут какой-то «путь», но доклад отвечает на все вопросы почему синтаксис именно такой (в том числе и в PHP), да и в целом показывает, что сам PHP не является исключением в плане «спотыкания о свои же архитектурные решения столетней давности».
dmz9
все еще не понял зачем мне чей то доклад, если «почему синтаксис именно такой» уже было написано в рфц
galliard
То есть перегрузки операторов ждать не стоит?
patricksafarov
А как эти две вещи связаны?
pronskiy Автор
Перегрузка операторов была в другом RFC wiki.php.net/rfc/userspace_operator_overloading и да, пока ждать не стоит, но можно делать с помощью z-engine github.com/lisachenko/z-engine#object-extensions-api
std00
Так еще вторичное голосование будет по поводу выбора синтаксиса @: или уже все?
pronskiy Автор
Оно было там же ниже https://wiki.php.net/rfc/attributes_v2#:~:text=Which%20syntax%20to%20use%20for%20attributes%3F
std00
Спасибо.