Свежая подборка со ссылками на новости и материалы. В выпуске: обновления PHP, Laravel 5.8, Xdebug 2.7 и другие релизы, 3 свежих RFC, 2 принятых, и концепт из PHP Internals, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.3.3
- PHP 7.2.16
- PHP 7.1.27
- Xdebug 2.7.0 — С долгожданной полной поддержкой PHP 7.3.
- Drupal Camp Belarus 2019 — Минск, 18-19 мая. Прислал chilic.
PHP Internals
- [RFC] Saner string to number comparisons — В своем свежем RFC Никита Попов предлагает изменить поведение
==
и сделать нестрогие сравнения менее подверженными ошибкам. В частности, сравнение чисел предлагается использовать, только если сравниваемая строка на самом деле является числовой. В противном случае число преобразуется в строку, и выполняется сравнение строк.Данное предложение влечет за собой изменение поведения операторов сравнения
<=>
,==
,!=
,>
,>=
,<
, и<=
, конструкцииswitch
, функций типаin_array()
,sort()
и других.В ответ поступили идеи разной степени радикальности: от введения специального флага
declare('strict_comparison=1');
, который бы превращал все==
в===
, до предложения отменить == вообще.Ну а пока, в 7.4, вероятно, будет бросаться Warning, если результат сравнения отличается от предполагаемого в PHP 8.
- [RFC] Permit trailing whitespace in numeric strings — Еще одно предложение призванное улучшить консистентность, но путем ослабления. Предлагается разрешить пробельные символы в конце числовых строк, то есть чтоб
"123 " == " 123"
и все прочие операции работали, как и для строк с начальными пробелами. - [RFC] Consistent type errors for internal functions — Предложение принято и значит в PHP 8 встроенные функции будут бросать TypeError в случае, если переданы параметры неверного типа и соответственно не будут при этом возвращать null.
- [RFC] Weak References — Предложение по реализации слабых ссылок принято.
- [RFC] Locked Classes — Предлагается ввести новое ключевое слово
locked
для классов. Такие классы будут закрыты для динамического использования свойств, то есть нельзя обращаться к необъявленным свойствам:Скрытый текстlocked class TestClass { public $definedProp; } $t = new testClass(); $t->definedProp = "OK"; echo $t->definedProp; unset($t->definedProp); echo $t->nonExistentProp; // Error $t->nonExistentProp = "Not OK"; // Error unset($t->definedProp); // Error
- PHP Internals News: Episode 1 — Новый подкаст от автора Xdebug Derick Rethans. В первом выпуске разговор с Никитой Поповым.
- Allow throwing from __toString() — PR от Никиты с фиксом одной из старых проблем PHP – невозможность бросать исключения в
__toString
. - List comprehension — Концепт от Сары Гоулман с реализацией спискового включения (list comprehension) для PHP. Синтаксис менее элегантный, чем в Python, но выглядит интересно:
Скрытый текст
$a = [1, 2, 3]; $mul = 3; $c = [ for $a as $v yield $mul * $v use ($mul) ];
Инструменты
- spatie/image-optimizer — Пакет оптимизирует размер изображения прогоняя через цепочку инструментов.
- swagger-mock/swagger-mock — Mock-сервер для OpenAPI 3 с поддержкой генерации тестовых данных. Прислал strider2038.
- johnkary/phpunit-speedtrap — Утилита подскажет какие из ваших PHPUnit тестов выполняются слишком долго.
- BrainMaestro/composer-git-hooks — Управление Git-хуками из сomposer.json.
- blastcloud/guzzler — Удобные моки для Guzzle-запросов.
- ptlis/php-serialized-data-editor — Позволяет манипулировать сериализованными с помощью PHP данными без прямой десериализации.
- bakame-php/csv-doctrine-collections-bridge — Позволяет делать доктриновские запросы к CSV-данным. Подробнее в посте.
- VKCOM/noverify — Линтер для PHP от Команды ВКонтакте теперь в открытом доступе. Сделан на основе z7zmey/php-parser. Хабрапост в поддержку.
Symfony
- Symfony Gets Real-time Push Capabilities! — В Symfony реализована поддержка модели «push» и приложений реального времени через протокол Mercure. Протокол работает поверх SSE и в отличие от WebSocket может использовать возможности HTTP/2 и HTTP/3.
- Новое в Twig: Классы в неймспейсах.
- symfony/http-client — Представлен новый компонент в семействе Symfony – HTTP-клиент. Реализован собственный интерфейс без использования PSR-18, но имеется адаптер для него. Больше информации на слайдах Фабьена.
- King2500/symfony-meta — Пакет улучшает автодополнение для Symfony в PhpStorm 2019.1 благодаря новым возможностям .phpstorm.meta.php.
- Неделя Symfony #636 (4-10 марта 2019)
Laravel
- Laravel 5.8 — В релизе доработаны HasOneThrough отношения в Eloquent, хелперы для строк и массивов объявлены устаревшими, улучшена валидация и-мейлов и другое. Подробнее в докладе Тейлора на Laracon Online.
- Подкаст Тейлора Laravel Snippet #7, #8
- Как заменить фасады и статические вызовы в Laravel на Dependency Injection
- REST API на Laravel в 100 строк кода
- psalm/laravel-psalm-plugin — Плагин статического анализатора Psalm для Laravel. Работает на основе стабов и .phpstorm.meta.php сгенерированных с помощью laravel-ide-helper. Пост в поддержку.
- AlexHnydiuk/laracent — Centrifugo broadcast driver для Laravel 5.7 Прислал nokse.
- avto-dev/roadrunner-laravel — Пакет интеграции RoadRunner с Laravel-приложением. Поставляются конфиги и легко расширяемый воркер. Прислал paramtamtam.
Yii
- Yii 2.0.16.1
- Релизный цикл Yii — Мажорный релиз поддерживается 5 лет, из которых 2 активных фиксов и 3 – фиксы ошибок безопасности.
- zhuravljov/yii2-queue-monitor — Веб-интерфейс для мониторинга и управления очередями Yii2.
Async PHP
- WyriHaximus/reactphp-cron — Cron-подобный планировщик(таймер) для ReactPHP.
- phpinnacle/ensign — Асинхронный signal dispatcher поверх Amphp.
Материалы для обучения
- Предсказываем загрязнение воздуха методом k-ближайших соседей на PHP — с использованием php-ai/php-ml.
- Реализация двоичной кучи на PHP
- Matthias Noback: Hand-written service containers
- О том, как опечатка привела к эксплуатации RCE-уязвимости
- Как я использую Live Templates в PhpStorm — В тему о том, как шарить сниппеты для PhpStorm через GitHub-репозиторий.
- Шаринг сессий между Node.js и PHP
- FunPHP: Паблик морозов на собеседовании
- PHP: изменение стуктуры БД в командной разработке
- Автоматизация конвертирования word файлов в другие форматы
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 150
Автор: Роман Пронский