Свежая подборка со ссылками на новости и материалы. В выпуске: изменены правила голосования за RFC в PHP Internals, стартовал прием заявок на доклады для PHP Russia 2019, новое расширение для реализации параллельного исполнения кода, свежие материалы для обучения, видео, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PHP Russia 2019 — Уже известен первый звездный докладчик, которого мы скоро объявим. А пока полным ходом идет прием заявок на доклады. До 25 февраля билеты на конференцию можно купить по самой выгодной цене.
- 16 марта Вadoo PHP Meetup: тесты и качество кода. Регистрация открыта
PHP Internals
- Предложение отменить 50% порог при голосовании принято и отныне все RFC требуют большинства в 2/3 голосов.
- PEAR по умолчанию не будет устанавливаться начиная с PHP 7.4.
- Отличный обзор непринятых RFC — Почему дженерики, короткие лямбды, перегрузка методов, аннотации и т.д. так и не реализованы и какой прогноз.
- Автор Xdebug Derick Rethans рассказывает о небольшом баге в PHP <7.3.2
Инструменты
- krakjoe/parallel — Новое расширение от автора pthreads с упрощенным интерфейсом для параллельного (многопоточного) исполнения кода. Подробнее о мотивах создания расширения в посте.
- willdurand/hateoas 3.0 — Популярная библиотека и бандл для реализации HATEOAS в REST сервисах.
- liip/serializer — Пакет для (де)сериализации данных. Совместим с jms/serializer и быстрее последнего. Подробнее о производительности в посте.
- TBPixel/xml-streamer — Пакет для потокового чтение XML-данных, совместим с PSR-7.
- phpstan/phpstan-doctrine — Расширение PHPStan для поддержки Doctrine ORM, включая анализ DQL.
- spatie/enum — Реализация перечисляемого типа и в поддержку пост об enum в PHP.
- kriswallsmith/Buzz — Легковесный HTTP-клиент.
- thecodingmachine/graphqlite — Еще один GraphQL фреймворк для PHP. Вводный пост с обзором в поддержку.
Symfony
- jorge07/symfony-4-es-cqrs-boilerplate — Скелет приложения на Symfony 4 с использованием практик DDD, Event Sourcing, CQRS.
- Новое в Symfony Flex 1.2
- Неделя Symfony #634 (18-24 февраля 2019)
Laravel
- drfraker/snipe-migrations — Ускоритель миграций БД для тестов в Laravel.
- ben182/laravel-ab — Инструмент для A/B тестирования в приложениях на Laravel.
- Серверсайд приложение с клиентсайд рендерингом с помощью Vue.js и Laravel
- Как использовать паттерн «репозиторий» в Laravel
- Вопросы и ответы для собеседования по Laravel
- PHP Package Development — Курс по разработке пакетов для Laravel и PHP.
- Laravel Core Adventures: Как устроены фасады
- Подкаст от Тейлора Laravel Snippet #6
Async PHP
CMS
- WordPress 5.1 “Betty” — WP теперь будет предупреждать, если сайт работает на устаревшей версии PHP.
- Сравнение REST vs JSON:API vs GraphQL вообще и в контексте Drupal
- Magento Tech Digest #46
Безопасность
- Познавательный анализ RCE уязвимости в WordPress 5.0.0
- Критическая уязвимость в Drupal — Ошибка позволяет выполнить произвольный PHP код на сервере. Уязвимости присвоен наивысший уровень опасности. Пример эксплуатации.
- Обзор основных типов уязвимостей PHP-приложений
Материалы для обучения
- Руководство по обновлению PHPUnit до 8 версии от Sebastian Bergmann
- Как я геймифицировал модульные тесты для моего PHP-фреймворка и увеличил покрытие с 0 до 93% за 30 дней.
- Новые возможности .phpstorm.meta.php в PhpStorm 2019.1
- Как написать свой простой AI для игры в шахматы на PHP
- Уход от магии или почему я больше не хочу использовать Laravel
- PhpRedis vs Predis: сравнение на реальных продакшн данных.
- Что такое командная шина и почему ее следует использовать
- Паттерны проектирования на PHP — Обновлены в соответствии с PHP 7.3 + есть примеры из реальной жизни, а не только модельные.
- PHP для начинающих: Подключение файлов
- PHP для начинающих: Обработка ошибок
- Интервью с Романом Павлушко, одним из первых инженеров Avito — О технической стороне проекта: стеке, архитектуре, проблемах роста, команде и PHP.
Занимательное
- jaem3l/php1-docker-image — Docker-образ с PHP 1.0.8. В тему немного воспоминаний от Ларри Гарфилда о том, каким был PHP 20 лет назад.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 149
trawl
Но там предлагают просто возвращать те же самые AR-модели… Уж если следовать паттерну, то нужно вводить слой сущностей (DTOшки, или аналог Entity в симфони), которые знать не знают о базе данных...
oxidmod
Можно сделать интерфейс для модели и из репозитория возвращать интерфейсы.
nepster-web
В этом случае нужно думать о реляциях, типах и изоляции.
oxidmod
Я вот придерживаюсь идеи, что отдавать наружу связи — плохая идея. А вот метод, возвращающий коллекцию идентификаторов — вполне норм. Так что интерфейсы у моделей получаются достаточно чистыми.
Главное, нужно рахделить чтение и запись. Запись через модели, а чтение отдельно, хоть рав запросами с нужными оптимизациями.
nepster-web
Согласен, однако достаточно избыточно наращивать поверх AR слои с изоляцией, тогда мы теряем все его плюсы. Я в свою очередь очень много спотыкался об подобные вещи, сейчас AR уже давно не использую выбор пал в сторону DataMapper (Doctrine2).
Если уже работать с AR то нужно принять правила игры.
Adelf
Раз в два-три месяца стабильно кто-то пишет про репозитории и Eloquent. и как «правильно» их использовать. Притом ни для чего они нужны, ни примера чуток посложнее Post у них не находится.