Вышел PHP 8.4

от автора

21 ноября 2024 года состоялся релиз языка программирования PHP 8.4, включая сборки для ОС Windows. В ветку добавлены обновления, а также серия изменений, которые нарушают совместимость с предыдущими версиями. Предыдущая стабильная ветка вышла в ноябре 2023 года. Выпуск PHP 8.0 произошёл в ноябре 2020 года.

По информации OpenNET, основные изменения и доработки в PHP 8.4:

  • предложена новая реализация JIT-компилятора, построенная на базе IR Framework. Ключевое отличие в том, что старый JIT напрямую генерировал машинные инструкции на основе байткода и с использованием разных бэкендов для архитектур x86_64 и AArch64, а новый JIT использует единый для всех архитектур бэкенд и генерирует промежуточное представление (IR), которое затем дополнительно оптимизируется и преобразуется в машинные инструкции для нужной целевой платформы;

  • добавлена поддержка прикрепления обработчиков свойств (property hook), позволяющих добавить дополнительную логику, выполняемую при изменении или доступе к свойствам объекта, реализуемую без перехвата операций чтения и записи при помощи общих функций __get и __set, и без создания дополнительных методов-обвязок. Применение обработчиков свойств даёт возможность существенно сократить объём кода и упростить переопределение поведения работы со свойствами, благодаря привязке собственного обработчика к каждому свойству;

  • разрешено указание ссылок на методы в конструкции «new» без отделяющих скобок, т.е. вместо «$name = (new MyClass())->method()» теперь можно указывать «$name = new MyClass()->method()»;

  • добавлена возможность асимметричного управления видимостью свойств объектов (public, private, protected), отдельно для операций записи (set) и чтения (get);

  • предоставлена штатная поддержка «ленивых» объектов (lazy), инициализация которых производится в момент первого использования;

  • реализован класс \Dom\HTMLDocument, поддерживающий корректный разбор разметки HTML5;

  • добавлена функция request_parse_body() для разбора HTTP-запросов с типом контента multipart/form-data (RFC1867);

  • добавлены методы DateTime::getMicrosecond() и DateTimeImmutable::setMicrosecond($microsecond) для получения и установки времени с микросекундной точностью, а также метод DateTime::createFromTimestamp();

  • в PDO (PHP Data Objects), абстрактный интерфейс для работы с базами данных, добавлена возможность создания парсеров SQL и субклассов, специфичных для определённых драйверов СУБД. Добавлены новые субклассы Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc и Pdo\Sqlite. Добавлены новые функции mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() и bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow();

  • операции exit и die теперь можно вызывать в форме полноценных функций, которые допускается передавать в качестве аргумента в другие функции. Ранее возможности функций exit() и die() были сильно ограничены, так как они представляли собой обвязки над ключевыми словами exit и die;

  • добавлены изменения, усложняющие эксплуатацию уязвимостей, вызванных выходом за границы буфера, а также усиливающие рандомизацию имён файлов, создаваемых через функцию tempnam();

  • объявлено устаревшим поведение, при котором для параметров функций с присвоенным по умолчанию значением null автоматически разрешалось присвоение значений null. Для того чтобы подобные параметры могли принимать значения null, теперь требуется явное указание префикса «?». Например, вместо «function save(Book $book = null) {}» следует указывать «function save(?Book $book = null) {}»;

  • объявлены устаревшими константы E_STRICT, MYSQLI_REFRESH_*, функции mysqli_ping(), mysqli_kill(), mysqli_refresh(), методы mysqli::ping(), mysqli::kill(), mysqli::refresh(), возможность использования «_» в качестве имени класса, некоторые свойства DOMDocument и DOMEntity. Запрещено переопределение констант класса GMP, для которого теперь выставлено ключевое слово «final».

11 ноября 2024 года состоялся релиз открытого проекта статического анализатора для кода на языке PHP PHPStan 2.0. Инструментарий позволяет находить ошибки в коде на языке PHP без его выполнения и использования unit-тестов.


ссылка на оригинал статьи https://habr.com/ru/articles/860350/