PHP 7.4. Что нового?
Времени к выходу новой версии осталось совсем немного. Поэтому давайте рассмотрим основные обновления в новом релизе PHP 7.4, выход которого запланирован на 28 ноября 2019 года. Этот релиз должен еще раз повысить производительность и улучшить читаемость и, конечно же, удобство сопровождения кода.
Вместо array_merge: в PHP 7.4 будет оператор Spread.
Именно Spread должен предоставить еще лучшую производительность по сравнению с array_merge. Этот оператор распространения является языковой структурой, в том числе оптимизация времени компиляции может быть выполнена для постоянных массивов. Spread также имеет поддержку любых перемещаемых объектов, используемая на данный момент array_merge поддерживает исключительно массивы.
Стрелочные функции 2.0 или короткие замыкания.
Анонимные функции очень сложные в процессе реализации и поддержки PHP. В данном релизе предложено ввести более короткий синтаксис стрелочных функций (или коротких замыканий). Это очистит PHP-код. Данное нововведение улучшит сам язык и сделает его более читаемым и простым в процессе обслуживания. Можно использовать параметры и возвращаемые типы , значения по умолчанию, списки аргументов переменной длины, передавать и возвращать по ссылке и тп.
Типизированные Свойства 2.0.
Начиная с версии PHP 7.2 можно использовать подсказки с object типом данных. А уже в PHP 7.4 добавляется поддержка объявлений типов свойств первого класса.
Слабые ссылки.
В PHP 7.4 вводится класс WeakReference. Именно он предоставляет возможность сохранять ссылку на объект, который не мешает запуску процесса уничтожения самого объекта. Сейчас PHP поддерживает Weak References, с расширением pecl-weakref. Поэтому новый API обладает набором отличий от документированного WeakRefкласса.
Предзагрузка (PHP Preloading).
Данное нововведение как раз должно повысить показатели производительности. Что такое предварительная загрузка? Это по сути загрузка библиотек и фреймворков в OPCache при инициализации модуля. Когда происходит запуск сервера и любого кода приложения, можно загрузить PHP файлы в память, а далее сделать их доступными на постоянной основе для всех запросов после - для этого сервера. Все функции и классы этих файлов будут доступны для запросов из коробки, как и внутренние объекты.
Предварительная загрузка имеет управление от php.ini директивы: opcache.preload. Она ведет на PHP-скрипт, который компилируется и выполняется при запуске сервера. Файл также предназначен для предварительной загрузки доп. файлов, включая их или через opcache_compile_file()функцию. Более детальную информацию можно найти в документации PHP на официальных ресурсах.
С другой стороны это означает, что предварительно загруженные файлы остаются в кеше в памяти opcache навсегда. Модификация их соответствующих исходных файлов не будет иметь никакого эффекта без перезапуска другого сервера. Весь функционал загруженных файлов будет постоянно находится в специальных таблицах функций и классов PHP и будет доступен для последующих запросов. В целом это должно улучшить показатели производительности.
Это, конечно же, еще не все нововведения в PHP 7.4. Их на самом деле намного больше и все они направлены на то, чтобы сделать язык еще более производительным. На данный момент на нашем хостинге уже доступна версия PHP 7.4 на всех тарифах.
PHP 7 по сравнению с предыдущими версиями значительно быстрее и это доказано множествами тестов, например:
- Увеличение скорости выполнения запросов в 2 раза больше по сравнению с PHP 5.6 (официальные данные).
- Кристиан Виг сделал сравнения в ходе которого обнаружено, что PHP 5.2 на 400% медленнее, чем PHP 7.
- Андрей Аврам сравнивал PHP 7.4 и 7.3, более быстрое выполнения и меньшее использование памяти как раз в обновленной версии.
- Phoronix сделали специальное тестирование и выявили, что PHP 7.4 Alpha немного быстрее PHP 7.3.