Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4.0 RC3, поддержка Composer-зависимостей на GitHub, обновление стандартов PSR, RFC предложения из PHP Internals и о координации проекта PHP, порция полезных инструментов, подкасты, митапы, и многое другое.
Приятного чтения!
Новости и релизы
- GitHub добавил поддержку графа зависимостей PHP — Файлы composer.json будут автоматически анализироваться на предмет небезопасных зависимостей. а репозитории получать соответствующие пул-реквесты с обновлениями.
- PHP-FIG нужна ваша помощь для обновления PSR-стандартов! — Группа PHP-FIG предлагает поэтапное добавление деклараций типов для возвращаемых значений и параметров в уже принятых стандартах PSR. Для того чтоб в современных приложениях можно было пользоваться преимуществами типов, но в то же время оставить стандарты доступными для старых приложений.
- PHP 7.4.0 RC3 — Очередной релиз-кандидат доставлен по расписанию. Осталось всего 3 RC до выхода PHP 7.4. Тем временем доступно руководство по миграции с PHP 7.3.x на PHP 7.4.x – спасибо lex111 за перевод.
- PHP 7.3.10, PHP 7.2.23 — Исправлены ошибки безопасности, всем пользователям рекомендуется обновиться.
- Ближайшие мероприятия:
- 19 октября, Ульяновск: Panda Meetup #28 Back-end (PHP)
- 20 октября, Харьков: ThinkPHP #19
- 24 октября, Минск: PHP Meetup #30
- 24 октября, Санкт-Петербург: Symfony St. Petersburg Meetup #7
- 26 октября, Ростов-на-Дону: PHP митап #1
- 26 октября, Киев: Symfony Camp UA 2019
- 19 октября, Ульяновск: Panda Meetup #28 Back-end (PHP)
PHP Internals
- [RFC] Object Initializer — Предлагается реализовать синтаксис быстрой инициализации объектов: Скрытый текстКоротко о предложении в посте автора и подробнее в подкасте PHP Internals News #30 с ним же.
class Car { public int $yearOfProduction; public string $vin; } $car = new Car { yearOfProduction = 2019, vin = "1FTFW1CVXAFD54385", }; $car = new Car { yearOfProduction = 2019, }; // throws RuntimeException: Initialization of Car class object failed due to missing required properties
- [RFC] Reclassifying engine warnings — Бросаемые нотисы и ворнинги в движке PHP были пересмотрены и по результатам голосования в PHP 8.0 имеем:
• Переменная не определена: будет бросаться Warning;
• Обращение к несуществующему индексу в массиве: Warning;
• Деление на ноль: Исключение, а также будет добавлена функцияfdiv()
, допускающая деление на ноль;
• Невалидный аргумент в foreach(): Warning;
• И все остальные изменения прошли голосование и приняты.
Подробнее в подкасте PHP Internals News #29 c Никитой Поповым. - Координация проекта PHP — Пока в Internals разгорались драмы, кое-что хорошее тоже было. Dan Ackroyd создал документ, в котором описаны актуальные задачи и обсуждения проекта. Если вы хотели бы помочь PHP, но не знаете как – этот документ хорошая отправная точка.
Инструменты
- cycle/orm — Мощная ORM, которую можно использовать и как DataMapper и в стиле ActiveRecord. Доступна подробная документация.
- ssx/skrub — Пакет для удаления ненужных файлов в зависимостях, может быть полезно для уменьшения Docker-образов.
- squizlabs/PHP_CodeSniffer 3.5.0 — Обновление c полной поддержкой стандарта PSR-12.
- infection/infection 0.14.0 — Фреймворк для мутационного тестирования. В новой версии 3 новых мутатора, улучшена производительность, снижено потребление памяти, и другие улучшения.
- solodkiy/mysql-error-parser — Библиотека для разбора ошибок MySQL. Прислал doctorx.
- alecrabbit/php-console-spinner — Красивые консольные спиннеры.
Symfony
- В Symfony добавлен новый компонент String для работы со строками в объектном стиле.
- Лучшие практики Symfony теперь все в одном месте.
- Геттеры/сеттеры и проблема с инкапсуляцией в Symfony проектах
Laravel
- spatie/laravel-model-states — Пакет добавляет поддержку состояния в моделях. Совмещает паттерн state и конечные автоматы.
- Hunternnm/laravel-roadrunner — Простой мост для работы Laravel и Roadrunner. Прислал hunternnm.
- CI для Laravel 6 на GitHub Actions
- DDD — новый хелпер для отладки в Laravel 6
- Сравнение Inertia.js и Livewire
- Серия роликов о тестировании в Laravel
- Laracasts: Laravel 6 с нуля
Yii
- YIMP — Панель управления для Yii 2 на Bootstrap 4
- Yii 2.0.27, Debug 2.1.9 и прогресс по Yii 3, включая интересный эксперимент по использованию cycle/orm в качестве БД-слоя.
Async PHP
- seregazhuk/php-watcher — Пакет для автоматического рестарта PHP-приложений при изменении файлов. Может быть удобен при разработке демонизированных PHP-приложений.
- clue/reactphp-docker — Асинхронный клиент для Docker Engine API. Пост в поддержку.
- Пишем RESTful API с помощью ReactPHP: Загрузка картинок, Отдаем статику
Материалы для обучения
- Matthias Noback: Используем phploc для быстрой оценки качества приложения, Part 2
- doganoo/PHPAlgorithms — Подборка популярных алгоритмов из книги «Cracking the Coding Interview» с реализацией на PHP.
- Самые популярные магические методы в PHP проектах
- Подробно о том, что такое абстракции в разработке
- gabrielrcouto/awesome-php-ffi — Примеры использования FFI из PHP 7.4.
- Проверка иммутабельности с помощью Psalm
- Больше чем RCE или несколько способов эксплуатации уязвимостей
unserialize()
. - Четыре столпа PSR
- PHP-библиотеки для e-commerce: работа с АТОЛ и Payture, парсинг кодов GS1 и другие задачи.
- Странные они, статические переменные в PHP
- PHP Xdebug proxy: когда стандартных возможностей Xdebug не хватает.
- Code style как стандарт разработки
- PHP, почём абстракции для народа?
Аудио/Видео
- Грамотное ООП — Видео доклада с PHP Russia 2019
- Производительность PHP-бэкенда. Видео с Badoo PHP Meetup #3
- Стрим от Derick Rethans, в котором он фиксит баг в Xdebug.
- PHP Internals News #28 — С Andreas Heigl о переносе документации PHP из SVN в Git.
- PHP Internals News #27 — С Никитой Поповым о необходимой помощи в добавлении типов к внутренним функциям.
- Пятиминутка PHP:
• #68 Drupal — О современном положении дел в популярной CMS системе Drupal.
• DDD #5 — Value-Objects
• DDD #6 — Services & Modules
• DDD #7 — Парадигмы моделирования и многоуровневая архитектура
Занимательное
- ElePHPant.me — Сайт для обмена слониками.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 164
Комментарии (8)
franzose
07.10.2019 18:46[RFC] Object Initializer
Судя по голосованию, его не приняли. Хотя синтаксис интересный.
bm13kk
09.10.2019 13:31+1предложение as is не сильно интересно и я понимаю разработчиков ядра.
1) Есть большая проблема — бойлерплейт для DI. Это предложение от него не спасает.
Какие именно проблемы решает это предложение (кроме ДИ) — я не понимаю. Так как примеры из самого предложения отлично решаются паттерном билдер и текучим синтаксисом.
2) Есть классный синтаксический вариант — контекст. Когда пишешь `Math {x plus y; foo more bar}`. И имеется в виду `math.plus()` и `math.more()`. По количеству работы — тоже самое. По применимости — космос по сравнению с этим предложением.
То есть слишком большая цена (кода в ядре и новых веток парсера) при незначительной выгоде.SerafimArts
09.10.2019 00:44А теперь предлагаю посмотреть на код какого-нибудь JavaScript и количество вызовов структур вида
{key: value}
. В PHP аналогичным способом используются массивы['key' => $val]
.
Единственное отличие от описанных выше структур — это добавление типизации. Т.е. связь этих аморфных структур с классом. Т.е. не будет никаких аморфных километровых массивов, а набор строго определённых структур.
Так что, имхо, принятие этого RFC создало бы эффект разорвавшейся бомбы для типизации DTO, настолько подобной конструкции не хватает в языке и настолько она нужна.
P.S. В качестве альтернативной реализации можно было бы реализовать каст к классам, вроде:
class ExampleClass { public string $key; } $object = (ExampleClass)['key' => $val];
laskevych
Спасибо! Хорошее оформление и ценная информация :)