PHP Дайджест № 215 (1 – 15 ноября 2021)

image-loader.svg

Картинка: Gabriel Nunes.

Подборка свежих новостей и материалов из мира PHP.
В выпуске: последний релиз кандидат PHP 8.1 перед финальным релизом, бенчмарки PHP 8.1; в PHP 8.2 планируется задепрекейтить динамические свойства — добро или зло?; про перенос багов с bugs.php.net на GitHub; немного обновлен PSR-16.
Также в выпуске полезные статьи, видео и другие новости сообщества.

Приятного чтения!

Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.


image-loader.svg Новости


  • PHP 8.1.0 RC 6


    Вышел последний релиз кандидат, а значит PHP 8.1 выйдет уже меньше, чем через две недели.
    Кроме прочего, в PHP 8.1 сделано много улучшений по производительности. Судя по результатам свежих бенчмарков от одного из core PHP разработчиков, Symfony demo приложение работает на ~30% быстрее, чем на PHP 8.0.

    Веб-приложения не на компонентах Symfony получат более скромный прирост, например для WordPress будет ~3–5%.

  • [RFC] Migrating to Github Issues


    Предлагается перенести баги со старой системы bugs.php.net на GitHub в репозиторий php/php-src. Это касается всех багов, кроме секьюрити-проблем, которые не должны быть публичными.

    В тестовом репозитории настроены шаблоны для баг-репортов запросов на фичи. Можно создать и посмотреть, как это будет выглядеть.

  • [RFC] Deprecate dynamic properties


    На голосовании RFC с предложением задепрекейтить и впоследствии убрать динамические (необъявленные) свойства.
    class User {
        public $name;
    }
    
    $user = new User;
    
    // Assigns declared property User::$name.
    $user->name = «foo»;
    
    // Oops, a typo:
    $user->nane = «foo»;
    
    // PHP <= 8.1: Молча создает динамическое свойство $user->nane.
    // PHP 8.2: Вызывает предупреждение, но все равно создает динамическое свойство.
    // PHP 9.0: Выбрасывает исключение Error.
    

    Это изменение не будет касаться класса stdClass и унаследованных от него. А также не касается классов с магическими __get/__set.

    Кроме того, в последней версии RFC добавлен еще атрибут #[AllowDynamicProperties]. Его можно навесить на любой класс и в этом классе продолжат работать динамические свойства.

    Предложение вызвало волну споров в твиттере. Вот пример треда с недовольными таким подходом. Это изменение обратной совместимости и потребуется обновлять много кода, да и вообще ломает динамическую сущность PHP — говорят они.

    С другой стороны, отсутствие динамических свойств избавит от возможных ошибок и сделает код более прозрачным.

    Но что еще важно, если в PHP 9.0 удастся убрать динамические свойства, то это существенно упростит код интерпретатора и уменьшит потребление памяти. Причем памяти для всех приложений.

    Вот пример от Christoph M. Becker для иллюстрации проблемы с памятью свойств: https://3v4l.org/f8OZj. И это не утечка памяти, а эффект создания хеш-таблицы свойств, нужной для поддержки динамических свойств.

    Также в тему статья от одного из контрибьюторов Symfony о том, почему не стоит бояться депрекейшнов.

  • Обновлен PSR-16: Common Interface for Caching Libraries


    Для пакета php-fig/simple-cache выпущены две новые версии. В 2.0.0 добавлены типы для аргументов, а в 3.0.0 — типы возвращаемых значений.
  • Локальная root-уязвимость в PHP-FPM


    Уязвимость позволяет пользователю с низкими привилегиями (например, www-data) повысить свои привилегии до уровня root, используя ошибку в PHP-FPM. Хоть это серьезная проблема, но не RCE. То есть злоумышленнику сначала надо будет использовать другие техники, чтоб завладеть рабочим процессом PHP. По ссылке подробный разбор от исследователей.

    Уязвимость исправлена в поддерживаемых ветках PHP 7.4.25 и PHP 8.0.12 и PHP 7.3.32.

    На PHP 5.3—7.2 уязвимость тоже есть, но выпусков с исправлением не будет. Поэтому стоит срочно обновляться на поддерживаемые версии PHP.

image-loader.svg Инструменты


  • PHPStan 1.0 — После шести лет разработки состоялся первый стабильный релиз статического анализатора. В релизе новый уровень проверки »9» и другие улучшения.
    Есть свежее интервью с автором PHPStan: videoPHP Release Radar — Episode 13
  • melbahja/seo — Библиотека с хелперами для организации карты сайта, мета-тегов, и других оптимизаций под поисковые системы. Без сторонних зависимостей
  • PrinsFrank/php-geo-svg — Генерация географических svg-карт без использования сторонних сервисов.
  • sapienphp/sapien — Предоставляет Request и Response вместо глобальных массивов $_GET, $_POST, $_COOKIE, и функций для работы с ответами. PHP 8.1+.
  • Falseclock/AdvancedCMS — Библиотека для работы с CAdES — стандартом электронной подписи, представляющий собой расширенную версию стандарта электронной подписи CMS (Cryptographic Message Syntax). Прислал falseclock.

image-loader.svg Symfony


image-loader.svg Laravel


image-loader.svg Yii


image-loader.svg Статьи


image-loader.svg Аудио/Видео


community Сообщество



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


Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.

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

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

© Habrahabr.ru