Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.2.0 Beta 1, свежие RFC из PHP Internals, материалы по асинхронному PHP, видео с конференций и митапов, и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.2.0 Beta 1 — С первым бета-релизом заканчивается фаза активной разработки, а значит список новых возможностей в ветке 7.2 можно считать финальным. Следующая бета ожидается 3 августа. А пока можно попробовать PHP 7.2 из подготовленного Docker-образа.
- PhpStorm 2017.2 — Улучшена интеграция с Composer и Docker, автозапуск тестов, и другое. Видеообзор нововведений.
- OpenAPI Specification 3.0.0 — Релиз спецификации для описания API, ранее известной как Swagger.
- silexphp/Pimple 3.2.0 — DI-контейнер теперь с полной поддержкой PSR-11.
- Bolt 3.3.0 — Популярная CMS на компонентах Symfony.
PHP Internals
- RFC: Same Site Cookie — В
setcookie()
и другие функции для работы с куки предлагается добавить поддержку стандарта Same-site Cookie. - RFC: Raise warnings for json_encode() and json_decode() issues — При возникновении ошибки во время вызовов
json_encode()/json_decode()
предлагается бросать ошибку класса E_WARNING, вместо использования функцииjson_last_error()
. - RFC: Short Closures — Предлагается короткий синтаксис для конвертации Callable в Closure:
$writeln = {Util\writeln}; // is a simplification for $writeln = Closure::fromCallable('Util\writeln'); $writeln = {$terminal->writeln}; // instead of $writeln = Closure::fromCallable([$terminal, 'writeln']);
- RFC: Mixed typehint — Предлагается добавить mixed typehint:
function foo(mixed $arg): mixed { return $arg; }
Инструменты
- jakzal/phpqa — Все популярные инструменты для статического анализа PHP в одном Docker-образе.
- vaimo/composer-patches — Плагин для Cоmposer, который позволяет применять патчи к зависимостям. Прислал mougrim.
- SecureHeaders v2.0 — Библиотека для работы с HTTP-заголовками связанными с безопасностью. Во второй версии упрощена интеграция с фреймворками. Подробнее об инструменте в посте.
- igorw/evenement — Диспетчер событий вдохновленный EventEmitter из Node.js.
- leproxy/leproxy — HTTP/SOCKS прокси-сервер на PHP.
- jcupitt/php-vips — Биндинги для libvips, очень быстрой и легковесной библиотеки для работы с изображениями.
- travello-gmbh/amazon-alexa-skill-skeleton — Скелет приложения на Zend\Expressive для разработки скиллов для Amazon Alexa.
- nikic/php-ast — Расширение делающее абстрактное синтаксическое дерево доступным в userland.
Материалы для обучения
Symfony
- Изменения в core-команде Symfony
- Рекомендации по именованию событий для Symfony Event Dispatcher
- Подкаст Sound of Symfony: Episode 18 — Event sourcing
- Неделя Symfony #551 (17-23 июля 2017)
- Неделя Symfony #552 (24-30 июля 2017)
- Doctrine Specification Pattern или ваш реюзабельный QueryBuilder
Yii
- https://github.com/yiisoft/yii2-queue — Расширение Yii для работы с очередями.
Laravel
- Представлен Laravel Horizon — Дашборд для мониторинга и управления очередями на базе Redis. Подробнее в анонсе.
- JosephSilber/bouncer — Пакет для управления ролями и правами доступа в Laravel.
- orchestral/tenanti — Мульти-сайт на базе Laravel с сохранением каждого тенанта в отдельной базе.
- Vuedo/vuedo — Еще одна блог-платформа на Laravel и Vue.js.
- Основы Laravel Middleware
- Использование сервис-провайдеров в Laravel
- Новое в Laravel 5.5
- Orchid CMS — ещё одна CMS на Laravel
Zend
- Переиспользование фабрик в Zend ServiceManager
- Туториал по созданию модуля для Zend Expressive
- Неделя Zend Framework 2017-07-27
- Неделя Zend Framework 2017-07-20
Async PHP
- Async PHP — Полноценная книга о разработке асинхронных приложений на PHP.
- Асинхронные HTTP-запросы с помощью ReactPHP
- Создаем видеостриминг сервер на ReactPHP
- Как написать вотчер тестов а-ля JavaScript на PHP
- Не вызывайте методы инстанса статически
- Подборка хороших практик разработки на PHP — Также правила для Phpstan для автоматической проверки следования практикам.
- Отладка удаленного Xdebug за NAT
- Система управления складом с использованием CQRS и Event Sourcing. Проектирование
- Применение принципа poka-yoke в программировании на примере PHP
- Синглтоны и общие экземпляры
- Magento Dare to Share — Открытая Площадка для докладов о Magento, PHP и eCommerce
Аудио и видеоматериалы
- PHP Roundtable #065: TestFest 2017
- Видеозаписи докладов с PHP Odessa Conf 2017
- Superjob PHP-meetup. Прямая трансляция
- Пятиминутка PHP: Выпуск №28 — Superjob PHP-meetup
Занимательное
- Открытая Serverless-платформа Apache OpenWhisk (аналог AWS Lambda) теперь поддерживает PHP.
- owl-lang.org — Язык программирования транслируемый в PHP. Смесь PHP и JavaScript.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Прислать ссылку
Быстрый поиск по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 112
Комментарии (40)
daggert
31.07.2017 09:21> RFC: Mixed typehint — Предлагается добавить mixed typehint:
Вот я не понимаю почему нельзя было добавить данный тип с самого начала, при внедрении типизации? Либо я один такой дурак и не мог грамотно реализовать паттерн repository без mixed?franzose
31.07.2017 09:33+1А зачем в репозитории
mixed
? Репозиторий либо конкретную сущность возвращает, либо набор, т.е.array
.
oxidmod
31.07.2017 09:34+8А в чем смысл mixed? Это же равносильно отсутствию какого либо тайпхинта
gro
31.07.2017 11:57+4Ничего не указано — как вариант просто забыл указать или поленился.
mixed — явно указано, что здесь mixed.edogs
31.07.2017 13:17+3/sarcasm/
предлагаем в следующей версии вместо пустой строки писать «this is empty line, nothing here»
что бы точно быть уверенным в том, что здесь должна быть именно пустая строка, а не что-то важное, что ты просто забыл написать или поленился
/sarcasm/SamDark
01.08.2017 01:20Хорошая практика именно так писать в пустых try-catch.
SerafimArts
02.08.2017 17:10offtop<irony>
Мир перевернулся в тот самый момент, когда SamDark решил поговорить о хороших практиках. Осталось услышать доклад от разрабов битрикса о каких-нибудь SOLID, SRP и прочих страшных штуках, и можно считать, что в жизни видел всё +))))
</irony>SamDark
02.08.2017 18:08+2Я о них всегда говорил и мнение особо не поменялось. Просто раньше я говорил очень неосторожно и меня можно было понять как «не стоит их изучать и применять», хотя на самом деле я имел ввиду то, что думать надо, а не фанатично применять не разобравшись.
samizdam
31.07.2017 10:52Спорное улучшение. Как и nullable, поскольку ослабляет типизацию.
franzose
31.07.2017 11:24Ослабляет типизацию, а также позволяет тут и там нарушать контракты, которые по идее должны быть заложены в интерфейсах...
gro
31.07.2017 12:03mixed и так используется повсеместно и ослабляет типизацию.
теперь он только будет явно указываться.samizdam
31.07.2017 14:47+1Одно дело принять правило: везде используем тайпхинтинг и выпиливать места без типизации, где только возможно, а где невозможно пересматривать контракты.
И другое дело принять правило, но либо с оговоркой: не используем mixed, либо оставить лазейку лентяям.
Я за первый вариант без оговорок и двусмысленностей, как более строгий. И поэтому против mixed.
daggert
31.07.2017 14:59+2Категорично против mixed нельзя быть. Ну вот как например быть с реестром, про который я начал беседу? Вот запрашиваете вы registry->get($var) — и вот лично у меня фреймворк сейчас может вернуть bool, string или null. Как тут без mixed обойтись?
gro
31.07.2017 17:37Ваше мнение по этому поводу, несомненно, имеет право на существование.
Но оно не имеет отношения к тому, что здесь обсуждается.
daggert
31.07.2017 11:05+4Ой господа, простите, не repository я имел ввиду а registry. С утра голова не заметила подвоха.
Gemorroj
31.07.2017 10:08+11Лучше бы реализовали как в phpdoc сейчас пишут — варианты типов данных:
string[]|string
, например.
Это позволило бы сильно снизить вообще необходимость такого типа какmixed
.
Fr05t1k
31.07.2017 10:19Лучше бы
static
typehint добавили.SerafimArts
31.07.2017 10:55+4static — это рантайм, а вся типизация резолвится статически, как в константах и аргументах методов (там, например, нет static, но есть self и в т.ч. доступны примитивные операции). Именно по-этому тайпхинтинг не появится никогда =)
gogolinsky
Спасибо!