Фото: Иван Ганцев.
Подборка свежих новостей и материалов из мира PHP. В выпуске: вторая альфа PHP 8.1.0 и обзор того, что еще может войти в релиз; новый RFC с предложением добавить механизм защиты от инъекций. А также порция полезных инструментов, статьи, видео и подкасты.
Приятного чтения!
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Подборка свежих новостей и материалов из мира PHP. В выпуске: вторая альфа PHP 8.1.0 и обзор того, что еще может войти в релиз; новый RFC с предложением добавить механизм защиты от инъекций. А также порция полезных инструментов, статьи, видео и подкасты.
Приятного чтения!
Новости
PHP 8.1.0 alpha 2
Вторая альфа доставлена по расписанию.
Заморозка фич ожидается 20 июля. Это значит, что RFC опубликованные после 22 июня уже точно не попадают в 8.1.
Итого имеем из того, что уже точно будет:
- Enum они же перечисления RFC;
- Новый тип
never
для возвращаемых значений RFC; - Файберы RFC;
- Финальные константы в классах RFC;
- Оператор распаковки поддерживает массивы со строковыми ключами RFC;
- Объявлено устаревшим преобразование
float
вint
, где теряется дробная часть RFC; - Интерфейс
Serializable
объявлен устаревшим RFC; - Запись восьмеричных чисел с префиксом
0o
RFC; - Ограничено использование $GLOBALS RFC;
- Пересечения типов RFC;
Полный список изменений можно посмотреть на php.watch/versions/8.1.
И под вопросом остаются еще следующие (с моим прогнозом):
- [RFC] Partial Function Application — пока по голосованию не проходит 27: 17;
Один из авторов RFC, Larry Garfield, написал пост с примерами о том, для чего нужен PFA и пайп-оператор в PHP.
- [RFC] First-class callable syntax — скорее да, если не пройдет Partial Function Application;
- [RFC] Pipe Operator v2 — возможно да, если пройдет один из двух RFC выше;
- [RFC] Property Accessors — скорее всего нет, потому что слишком сложный;
- [RFC] Readonly properties 2.0 — вероятно да, если не будет выдвинут Property Accessors;
- [RFC] New in initializers — скорее да, но с ограниченным скоупом;
- [RFC] Is_Noble — на вид однозначное предложение, но обсуждение идет туго;
PHP Internals
[RFC] Pure intersection types
В PHP 8.1 будут простые пересечения типов. Синтаксис вот такойTypeA&TypeB
и означает, что переменная должна одновременно бытьinstanceof TypeA
иinstanceof TypeB
.
Предложение принято практически единогласно, но вот как высказался об этом Дмитрий Стогов:
Например, как часто ты будешь использовать пересечения типов? Скорее всего, никогда, а тормозить они будут всегда (даже когда не используются).
Больше интересных мыслей в интервью: Дмитрий Стогов о своём пути и PHP.
[RFC] Is_Noble
Проблема SQL- и других инъекций всегда была очень острой для безопасности PHP приложений. Данный RFC предлагает частично решить вопрос подобных уязвимостей.
Предлагается добавить функциюis_noble(string $str): bool
, которая проверяет является ли переданная строка «чистой», то есть объявлена как литерал в коде, а не получена извне.
3v4l.org/1aFC2#focus=rfc.literalsis_noble('Example'); // true $a = 'Hello'; $b = 'World'; is_noble($a); // true is_noble($a . $b); // true, конкатенация двух чистых строк тоже чистая is_noble("Hi $b"); // true is_noble($_GET['id']); // false потому что данные от пользователя is_noble(sprintf('Hi %s', $_GET['name'])); // false is_noble('/bin/rm -rf ' . $_GET['path']); // false is_noble('<img src=' . htmlentities($_GET['src']) . ' />'); // false — никакой ескейпинг не делает строку чистой is_noble('WHERE id = ' . $db->real_escape_string($_GET['id'])); // false
Эту функцию можно будет использовать в пакетах для валидации входных данных и быть уверенном на 100%, что пользователь пакета не передал опасный аргумент.
[RFC] Deprecate boolean to string coercion
Предлагается задепрекейтить преобразованиеbool
вstring
, потому что результат неочевидный и с большой вероятностью приводит к багам:(string)true -> '1' (string)false -> ''
- Ilija Tovilo спрашивает идеи для простых RFC для 8.1, Никита отвечает «дженерики» :-)
Инструменты
- VKCOM/nocolor — Новый инструмент от команды VK для валидации архитектуры PHP проектов. Есть сравнение с deptrac. Был анонсирован на PHPRussia.
- beyondcode/expose 2.0 — Классный инструмент для проброса локального сервиса наружу: тестирование вебхуков, демонстрация сайтов. Аналог ngrok, только на PHP.
- nunomaduro/phpinsights v2.0 — Красивая CLI-обертка над различными инструментами контроля качества кода.
- nunomaduro/patrol — Красивый CLI анализатор зависимостей, указанных в composer.json.
- k-samuel/faceted-search — Легковесный пакет для организации фасетного поиска на сайте. Работает на чистом PHP и можно использовать на небольших данных (100_000 продуктов с 10 свойствами) до внедрения ElasticSearch.
- Ne-Lexa/php-crossplane — Парсер и билдер конфигурационных файлов NGINX. Прислал NeLexa.
Symfony
- Максимальное масштабирование демо-приложения Symfony с помощью Varnish
- Главные причины, почему мы разрабатываем веб-приложения на Symfony
- Неделя Symfony #756 (21-27 июня 2021)
Laravel
- laravelexamples.com — Каталог разных полезных примеров для Laravel от автора YouTube-канала Laravel Daily.
- Автоматическая документация по коду для API в Laravel
- Создание REST API c Ролями и Правами
- Orbit — использование Laravel без SQL
- Видео от Mohamed Said (Laravel core): 5 вещей, которые нужно учитывать при работе с контейнером в Laravel; Обмен сообщениями в режиме реального времени в Laravel — Основы про laravel/echo; Что нового в Laravel (#3) – 2021-06-23
Статьи
- PHP-Compiler, или ныряем в кроличью нору FFI.
- PHP — я бы купил это за доллар — В чем клёвость PHP.
- «Дело было вечером, делать было нечего» или краткая история о сравнении производительности языков программирования — PHP быстрее Python и Ruby, PHP вообще один из самых быстрых интерпретируемых языков.
- Чек-лист: как оставаться отказоустойчивым, переходя на микросервисы на PHP (и как правильно падать)
- Rector — The Power of Automated Refactoring — Книга по rectorphp/rector полностью готова. Ссылка со скидкой $5 специально для читателей дайджеста действует до 23 июля.
- Как насчет билдеров для конфигов? — Интересная идея от Brent Roose: вместо xml, yaml или PHP-массивов использовать объекты для конфигурационных файлов. Из плюсов получаем дополнение и валидацию в IDE из коробки.
- b-viguier/php-emoji — Функции PHP для работы с массивами объясняются с помощью emoji:
Аудио/Видео
- Пятиминутка PHP № 89: Соревнования по программированию на платформе All Cups.
- PHP Internals News podcast #89 — Про Partial Function Application с Larry Garfield и Joe Watkins.
- Никогда* не используйте массивы — Доклад Larry Garfield.
- Геометрическая интерпретация принципа подстановки Барбары Лисков — Полезно, чтобы раз и навсегда понять, что он значит.
Разное
- Интересная идея переопределить встроенные функции и отключить стандартную реализацию через disable_functions:
- Неужели Битрикс станет норм?
Подписывайтесь на Telegram-канал PHP Digest.
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 205