Pull to refresh

PHP Дайджест № 206 (15 – 29 июня 2021)

Reading time4 min
Views11K
Фото: Иван Ганцев.

Подборка свежих новостей и материалов из мира 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.

    И под вопросом остаются еще следующие (с моим прогнозом):


PHP Internals


  • check [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, которая проверяет является ли переданная строка «чистой», то есть объявлена как литерал в коде, а не получена извне.

    is_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
    
    3v4l.org/1aFC2#focus=rfc.literals

    Эту функцию можно будет использовать в пакетах для валидации входных данных и быть уверенном на 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




Laravel




Статьи




Аудио/Видео




Разное


  • Интересная идея переопределить встроенные функции и отключить стандартную реализацию через disable_functions:
  • Неужели Битрикс станет норм?




Подписывайтесь на Telegram-канал PHP Digest.

Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.

Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP-Дайджест № 205

Tags:
Hubs:
Total votes 51: ↑50 and ↓1+49
Comments21

Articles