PHP 8 — что нового в 8-ой версии php
Оглавления для удобной навигации по новым PHP 8.0 фичам (клик для перехода):

1. Новые нативные функции для работы со строками
str_contains — для проверки есть ли подстрока в строке.
str_contains(string $haystack, string $needle): bool
str_starts_with, str_ends_with — функции для проверки «начинается ли строка с» и «заканчивается ли строка на»
str_starts_with(string $haystack, string $needle): bool
str_ends_with (string $haystack, string $needle): bool
2. Named arguments
Теперь можно использовать именованные аргументы. Это может быть полезно, например, когда функция имеет много необязательных аргументов, но нам они не важны и нам важно передать только последний из аргументов.
function namedArgExample(string $arg1, array $arg2 = [], array $arg3 = [], bool $arg4 = false); namedArgExample('string', arg4: true);
namedArgExample('string', [], [], true)
3. «Constructor property promotion» или просто «Constructor promotion»
Для меня, это одна из самых полезных фичей новой версии, которая позволяет экономить время разработки и рефакторинга.
Прямо в конструкторе можно указать модификтор доступа любого аргумента будь то private / protected / public , тогда property с таким именем можно нужно не объявлять вовсе. Как можно заметить, никакое присваивание в теле конструктора тоже не нужно, наличие модификатора доступа в конструкторе PHP 8.0 — автоматически создает проперти с именем, равным именем переменной и присваивает параметр в property.
class A < public function __construct( private B $b, private RouterInterface $router ) < >>
class A < private B $b; private RouterInterface $router; public function __construct( private B $b, private RouterInterface $router ) < $this->b = $b; $this->router = $router; > >
Используя DI, autowiring и constructor promotion — теперь сплошное удовольствие при подстановке зависимостей в сервис.
4. match expression
Match expression (см. https://www.php.net/manual/en/control-structures.match.php) — более емкий и читаемый вариант для оператора switch . Есть и отличие от switch : match всегда использует строгое сравнение. Отпадает необходимость в break.
$var = 2; echo match ($var) < 2 =>'two', 3 => 'three', default => 'none', >;
Итого про match:
не любой switch можно заменить на match . Вместо простых switch можно использовать более читаемый и емкий match .
5. Union types
class UnionTypeExample
В этом случае в проперти $this->city можно будет присовить только типы false, null или объект City.
То, что раньше описывали c помощью phpdoc /** @var false|null */ теперь можно легально описать языковой конструкцией.
Кроме types properties, Union types можно использовать как в аргументах, так и в возвращаемых значениях.
Лучше не увлекаться Union types в PHP, так как все таки это не однозначность в типах.
6. Attributes PHP 8.0 feature
Аттрибуты — фича, которая позволяет использовать языковую конструкцию для добавления мета-данных к классу, функции, проперти. Проблема, которую решают аттрибуты — зависимость кода от PHPDoc комментариев, что очень широко используется в doctrine, symfony и тд. Теперь выполнение кода может зависеть от аттрибутов:) которые являются языковой конструкцией, то есть это более «стандартизированный» подход.
Аттрибуты в PHP объявляются с помощью символов #[ и ]
/** * @Route(path="/", methods=, name="main") */ public function indexAction(): Response
#[Route('/', methods: ['GET'], name: 'main'] public function indexAction(): Response
По поводу синтаксиса аттрибутов было много споров. В PHP все что начинается с # является комментарием. Это значит, что синтаксис аттрибутов #[ не будет вызывать синтаксическую ошибку на более ранних версиях PHP (до PHP 8.0). То есть код с аттрибутами запустится и на более ранних версиях языка, чем когда аттрибуты стали поддерживаться (с PHP 8.0). Другой вопрос, станет ли код на ранних версиях работать ожидаемо:)
PHP 8.0: Nullsafe operator feature
Проверка на null при вызове методов может быть осуществлена прямо в вызове с помощью добавления знака ? (вопрос): ?->
Если один из объектов в цепочке вызов выше будет null , то в переменную запишется null
Может быть интересно:
Что нового в PHP 8, сравнение с PHP 7
07.01.2020 вышла новая стабильная версия PHP 8 (8.0.1). В этой статье мы расскажем о новых функциях и возможностях в сравнении с версией PHP 7.
PHP 8 стал еще более быстрым и надежным. По сравнению с версией PHP 7 появилось множество новых и полезных вещей, которые обязательно будут востребованы пользователями. Рассмотрим подробнее эти нововведения.
Типы Union 2.0 (Объединенные типы)
Существует множество случаев, когда использование типов объединения может быть полезным. Вместо аннотаций PHPDoc для объединенных типов теперь вы можете использовать объявления union type, которые проверяются сразу во время выполнения.
Union Types — это совокупность двух или более типов, которые указывают, что вы можете использовать любой из них.
JIT – компилятор
JIT (Just In Time — «в нужный момент») — это динамическая компиляция байт кода в машинный. JIT компилятор значительно улучшает производительность работы программ. Проверка на синтетических бенчмарках показывает улучшение производительности примерно в 3 раза и в 1,5–2 раза для некоторых долго работающих приложений.
В JIT код переводится сначала в промежуточное представление и только потом в машинный код. То есть, выполняется непосредственно на процессоре, а не на виртуальной машине Zend VM.
JIT реализован как независимая часть OPcache. Его можно включать / отключать во время компиляции или выполнения скрипта.

Использование ::class для объектов
В PHP 8 теперь вы можете использовать ::class для объектов вместо того, чтобы использовать get_class() как раньше. Работает точно так же, как и get_class().
Атрибуты
В PHP 8 теперь вместо аннотаций PHPDoc вы можете использовать структурные метаданные с нативным синтаксисом PHP.
Выражение Match
В PHP 8 новое выражение match похоже на оператор switch, но имеет свои особенности:
- Match — это выражение и его результат может быть сохранён в переменной или возвращён.
- Условия match поддерживают только однострочные выражения, для которых не требуется управляющая конструкция break;
- Выражение match использует строгое сравнение.
Оператор Nullsafe
В PHP 8 теперь вместо проверки на null вы можете использовать последовательность вызовов с новым оператором Nullsafe. Если один из элементов в последовательности возвращает null, то выполнение прерывается и вся последовательность возвращает null.
Улучшенное сравнение строк и чисел
Теперь при сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в строку и используется сравнение строк.
Ошибки согласованности типов для встроенных функций
В PHP 8 большинство внутренних функций теперь выбрасывают исключение Error, если при проверке параметра возникает ошибка.
Именованные аргументы
В PHP 8 теперь можно:
- Указывать только необходимые параметры и пропускать необязательные.
- Порядок аргументов не важен, аргументы самодокументируемы.
Объявление свойств в конструкторе
В новой версии PHP 8 теперь используется гораздо меньше шаблонного кода для определения и инициализации свойств.
Новый тип возврата static
Ранее в PHP уже были возвращаемые типы — self и parent, но static не был допустимым типом возврата для этого языка программирования. Теперь есть.
Throw-выражения
В PHP оператор throw не может создавать исключения там, где были разрешены только выражения, например стрелочные функции, оператор объединения и тернарный оператор.
В новом PHP 8 теперь вы можете преобразовывать инструкцию throw в выражение.
Weak maps
Weak maps — это набор объектов, на которые в коде слабо ссылаются ключи, что может привести к их удалению сборщиками мусора. В PHP 8 добавлен класс WeakMaps для создания сохранения ссылки на объект. При этом она не препятствует удалению самого объекта.
Завершающая запятая в списках параметров
Ранее при вызове функции в списках параметров отсутствовала поддержка запятой. В PHP 8 теперь это разрешено.
Новый Stringable интерфейс
В PHP 8 теперь вы можете использовать интерфейс Stringable для аннотации типов или имплементации метода __toString (). И больше нет необходимости реализовывать его вручную.
Новые функции в PHP 8
- get_debug_type() — возвращает тип переменной. В отличии от gettype() возвращает более полезный вывод для массивов, строк, анонимных классов и объектов.
- str_starts_with() — проверяет, начинается ли строка с определенной строки. Возвращает TRUE / FALSE.
- str_ends_with() — проверяет, заканчивается ли строка с определенной строки. Возвращает TRUE / FALSE.
- str_contains() — проверяет, содержит ли строка другую строку.
- fdiv() — эта функция похожа на fmod() и intdiv(), что позволяет делить на 0. Но вместо ошибок получаем INF, -INF или NAN, в зависимости от случая.
6. get_resource_id() — ранее ресурсам присваивается идентификатор, но для этого необходимо было преобразование ресурса в int. В PHP 8 добавлена функция get_resource_id(), что делает эту операцию более очевидной и безопасной для типов.
К сожалению многие CMS пока не поддерживают PHP 8, в частности и 1С-Битрикс. В любом случае поддержка PHP 8 скоро появится на всех тарифах нашего хостинга.
Подробнее ознакомиться с нововведениями можно на официальной странице проекта.
PHP 8.2: Что нового?
PHP 8.2 – это важный шаг на пути к модернизации языка PHP. Помимо добавления впечатляющих новых функций и улучшений, PHP 8.2 оптимизирует язык, отказываясь от поддержки динамических свойств, предупреждая при обнаружении некоторые неоптимальные значения конфигурации INI и исправляя некоторые устаревшие методы PHP, которые влияют на то, как PHP сортирует массивы и определенные типы операций преобразования/кодирования строк.
Улучшение системы типов
В PHP 8.2 устранены некоторые недостатки и ограничения системы типов, что предоставляет приложениям на PHP более высокий уровень безопасности типов. Это включает в себя добавление поддержки типа true и типов дизъюнктивных нормальных форм (DNF) и возможности использовать null и false как самостоятельные типы.
PHP 8.2 поддерживает типы дизъюнктивных нормальных форм (DNF). Это позволяет теперь комбинировать типы объединения (PHP 8.0) и типы пересечения (PHP 8.1), что позволяет заявлять точные и выразительные типы параметров, возвращаемых значений и свойств.
function process((HTMLRequest & RequestInterface) | APIRequest $request) < // . >
Объявление типа (HTMLRequest & RequestInterface) | APIRequest гарантирует, что значение $request является либо инстансом APIRequest, либо объектом класса, который реализует/расширяет/является инстансом и HTMLRequest и RequestInterface.
Поддержка true и false как самостоятельных типов позволяет заменять объявления типа bool в случае если булево значение всегда одно и то же.
function alwaysReturnsFalse(): false <> function alwaysReturnsNull(): null <> function alwaysReturnsTrue(): true <>
В более старых версиях PHP уже было возможно объявлять обнуляемые типы или типы объединения с помощью null. С момента релиза PHP 8.2 возможно объявлять null еще и как самостоятельный тип.
Классы, доступные только для чтения
PHP 8.1 добавило поддержку свойств readonly. Свойство readonly может быть установлено только один раз, и PHP активно предотвращает изменение значения даже в рамках класса.
PHP 8.2 выводит свойства readonly на новый уровень с классами readonly. Когда класс объявляется как readonly, все его свойства автоматически объявляются как readonly. Кроме того, это предотвращает добавление динамических свойств в классы readonly и гарантирует, что все свойства типизированы.
readonly class User
Все свойства класса readonly User автоматически объявляются как readonly.
class User
readonly class User
Новое расширение random
На протяжении всей истории своего существования PHP поддерживал различные генераторы случайных чисел (RNG) с разной степенью производительности и вариантами использования, и подходил для безопасных приложений. PHP 8.2 делает еще один шаг вперед, проводя рефракторинг всего функционала, связанного с RNG, и вводя новое расширение под названием random.
Расширение random обеспечивает ту же функциональность без нарушения работы каких-либо API. Таким образом, существующие функции rand, mt_rand, random_bytes, и random_int продолжают работать без изменений. Это расширение также предоставляет объектно-ориентированный API для генерации случайных чисел с подключаемой архитектурой, так что теперь легче имитировать и создавать новые генераторы случайных чисел, делая приложения на PHP безопасными и простыми в тестировании.
Константы в трейтах
С PHP 8.2 теперь возможно использовать константы в трейтах. Этим трейтам невозможно получить доступ напрямую, но эти константы становятся константами класса когда класс использует этот трейт.
trait FooBar < const FOO = 'foo'; private const BAR = 'bar'; final const BAZ = 'baz'; final protected const QUX = 'qux'; >class Test < use FooBar; >echo Test::BAZ; // 'bar'
Это не было возможно в PHP 8.1 и более старых версиях. К константам трейтов невозможно получить доступ напрямую (например, FooBar: :F00 не допускается). Константы трейтов также не должны конфликтовать с другими трейтами или непостредственным классом, который их использует.
Возможность помечать конфиденциальную информацию
PHP 8.2 добавляет новый встроенный атрибут для параметров, который называется #[\SensitiveParameter]. При использовании этого атрибута параметры не будут перечислены в трассировках стека и сообщениях об ощибках.
Функции, которые принимают пароли, закрытые ключи и другую конфиденциальную информацию, могут объявлять параметры атрибутом #[\SensitiveParameter]. Если вызовы функции внутри нее вызывают ошибку PHP или исключение, фактическое значение, переданное этому параметру, будет заменено объектом.
Встроенные в PHP функции, такие как password_hash и password_verify уже объявлены атрибутом #[\SensitiveParameter].
function passwordHash(string $password) < function passwordHash(#[\SensitiveParameter] string $password) < debug_print_backtrace(); >passwordHash('hunter2');
При наличии атрибута #[\SensitiveParameter] все трассировки стека активно редактируют фактическое значение, переданное параметру:
array(1) < [0]=>array(4) < ["file"]=>string(38) ". " ["line"]=> int(9) ["function"]=> string(3) "foo" ["args"]=> array(1) < [0]=>string(38) "hunter2" [0]=> object(SensitiveParameterValue)#1 (0) <> > > >
Новые функции и классы
В дополнение к полезным нововведениям, PHP 8.2 также привносит набор новых функций и классов:
Парсинг значений количества в INI: ini_parse_quantity
Функция ini_parse_quantity парсирует любой размер данных, распознаваемый значениями PHP INI (например, 56K, 256M, или 1G) и возврашает размер данных в байтах.
ini_parse_quantity('256M'); // 268435456
Поддерживать активное соединение по Curl: curl_upkeep
Функция curl_upkeep в расширении Curl в PHP 8.2 запускает базовую библиотеку Curl для выполнения необходимых задач, чтобы поддерживать соединение по Curl. Самый распространенный случа использования этой функции – поддержка постоянного подключения по HTTP (Keep-Alive), периодически вызывая функцию curl_upkeep.
Получение длины ключа шифрования: openssl_cipher_key_length
В OpenSSL PHP 8.2 появилась новая функция openssl_cipher_key_length, которая возвращает требуемую длину ключа (в байтах) для любого шифра, поддерживаемого в OpenSSL.
Эта функция устраняет необходимость хардкода требуемой длины ключа для операций шифрований в OpenSSL.
openssl_cipher_key_length("CHACHA20-POLY1305"); // 32 openssl_cipher_key_length("AES-128-GCM"); // 16 openssl_cipher_key_length("AES-256-GCM"); // 32
Сброс записанного пикового использования памяти: memory_reset_peak_usage
В PHP 8.2 добавлена новая функция memory_reset_peak_usage, которая сбрасывает пиковое использование памятие, возвращаемое функцией memory_get_peak_usage.
Это может быть полезно в приложениях, которые вызывают или повторяют действие несколько раз, и которым нужно записывать пиковое использование памяти при каждом вызове. Без возможности сброса использования памяти с помощью новой функции memory_reset_peak_usage функция memory_get_peak_usage возвращает абсолютный пик использования памяти на протяжении всей работы приложения.
Устаревшие элементы в PHP 8.2
PHP 8.2 также содержит немало устаревших элементов. Когда синтаксис, функция или какой-либо другой элемент является устаревшим, PHP выдает предупреждение об устаревших функциях, которое не должно нарушать правильно настроеные приложения на PHP, но записывается в журнале ошибок.
Обратите внимание, что, начиная с PHP 8.0, конфигурация отчетов об ошибках PHP по умолчанию установлена как E_ALL.
Устаревшие динамические свойства
Одним из наиболее заметных устаревших элементов в PHP 8.2 являются динамически объявленные свойства класса. От них можно отказаться, но рекомендуется объявить свойства класса в объявлении класса, желательно также с объявлением типа.
class User < public int $uid; >$user = new User(); $user->name = 'Foo';
Deprecated: Creation of dynamic property User::$name is deprecated in . on
Вероятно, это изменение повлияет на многие устаревшие приложения на PHP, поскольку устаревшие приложения, как правило, не объявляют свойства класса, когда они расширяются или получают развитие с годами изменений.
Рекомендуемый подход – объявить свойства в классе:
class User < public int $uid; public string $name; >$user = new User(); $user->name = 'Foo';
Существуют также возможность отказаться от этого устаревшего элемента и исключения к нему:
- stdClass и его подклассы
- Классы с магическими методами __get и __set
- Классы с новым атрибутом #[AllowDynamicProperties]
Устаревшие функции utf8_encode и utf8_decode
В PHP 8.2 функции utf8_encode и utf8_decode окончательно объявлены устаревшими. К сожалению, они были названы без упоминания того, что они кодируют/декодируют только из Latin 1 (ISO-8859-1).
Большинство приложений на PHP, которые используют эти функции, как правило, не знают об этом недостатке. Рекомендуемые замены – улучшенная функциональность, предоставляемая расширениями mbstring, iconv и intl.
Устаревшая интерполяция строк $
PHP всегда поддерживал интерполяцию строковых переменных с шаблоном «foo », а также с альтернативным синтаксисом, в котором знак доллара размещается вне фигурных скобок (например, «foo $»).
В PHP 8.2 альтернативный синтаксис размещения знака доллара вне фигурных скобок является устаревшим.
Устаревший в PHP 8.2
Синтаксис, рекомендованный для PHP8.2
Кроме того, в PHP 8.2 также являются устаревшими некоторые частично поддерживаемые вызываемые шаблоны и управление расширением Mbstring кодировок Base64, Uuencode, QPrint и HTML-сущностей.
Установка/обновление до PHP 8.2
PHP 8.2 теперь доступен для скачивания/установки со всех привычных источников:
- Windows: Скомпилированные бинарные файлы доступны на windows.php.net.
- Ubuntu/Debian: PHP 8.2 доступен на PPA ondrej/php. Подробное руководство по установке/обновлению доступно на PHP.Watch.
- Fedora/RHEL/CentOS/Alma/Rocky: Доступен как набор программного обеспечения php82 из репозитория Remi.
- Mac OS: PHP 8.2 можно установить через Homebrew с помощью репозитория shivammathur/homebrew-php.
- Docker: Официальные образы PHP 8.2 теперь доступны на Docker Hub с тегами 8.2*.
- Классы, доступные только для чтения (readonly)
- Тип true
- Null и false теперь самостоятельные типы
- Типы DNF
- Возможность помечать конфиденциальную информацию
- Новое расширение Random
- MySQLi: Новая функция mysqli_execute_query и новый метод mysqli::execute_query
- Поддержка модификатора (/n) в функциях preg_*
- Новый параметр INI error_log_mode для установки разрешений для файла журнала ошибок
- OpenSSL: Новая функция openssl_cipher_key_length
- Константы поддерживаются в трейтах
- Новая функция curl_upkeep
- Новая функция ini_parse_quantity function
- Новая функция memory_reset_peak_usage
- Curl: поддержка CURLINFO_EFFECTIVE_METHOD в функции curl_getinfo
- Добавлена функция imap_is_open
- Атрибут AllowDynamicProperties
- Независимое от локали преобразование регистра
- Предупреждения при парсинге INI
- Изменения порядка сортировки ksort(. SORT_REGULAR)
- Функция str_split возвращает пустые массивы для пустых строк
- Устаревшие динамические свойства
- Устаревшие функции utf8_encode и utf8_decode
- Mbstring: устаревшие кодировки Base64, Uuencode, QPrint и HTML-сущностей.
- Устаревшие частично поддерживаемые вызываемые шаблоны
- Устаревшая интерполяция строк $
- MySQLi больше не может быть скомпилирована с помощью libmysqli
![]()
Редакция WRP
В PHP 8.2 улучшена система типов, классы, доступные только для чтения (readonly), возможность помечать конфиденциальную информацию, новое расширение random, и множесто новых функций, а также несколько изменений, направленных на оптимизацию и модернизацию языка PHP. Онлайн заказ
Обзор PHP 8: что изменилось, рекомендации по тонкой настройке
С выходом PHP 8 разработчики получили доступ ко множеству новых функций и улучшений, которые делают написание кода на PHP более быстрым, безопасным и эффективным.
В этой статье мы рассмотрим некоторые из наиболее значительных изменений и новых возможностей, представленных в PHP 8, включая JIT-компилятор, поддержку типов union и именованные аргументы. Также мы приведем несколько рекомендаций по оптимизации и тонкой настройке.
PHP 8: Что нового?
Именованные аргументы (Named arguments)
Эта функция позволяет разработчикам передавать аргументы в функции, используя их имена, а не позиции. С их помощью разработчики могут пропускать необязательные аргументы, имеющие значения по умолчанию, и передавать только те, которые им нужны, причем в любом порядке. Это делает код более читабельным и снижает вероятность передачи неверного значения неверному параметру.

Поддержка атрибутов
Это нововведение позволяет добавлять структурированные метаданные к свойствам, методам, функциям и параметрам классов. Метаданные можно использовать для различных целей, например, для документирования кода или добавления информации для других инструментов.
Один из примеров использования этой функции ― автоматическая генерация документации API. Другой пример ― автоматическая проверка параметров функций на основе их метаданных. Таким образом, атрибуты обеспечивают PHP-разработчикам большую гибкость и расширяемость кода.

Продвижение свойств конструктора (Constructor property promotion)
Эта функция упрощает процесс определения и инициализации свойств объекта. До этого разработчикам приходилось определять свойства объекта, а затем инициализировать их в методе конструктора, что отнимало время и могло приводить к ошибкам.
Благодаря функции Constructor Property Promotion разработчики теперь могут определять и инициализировать свойства объектов непосредственно в методе конструктора, сокращая объем необходимого кода и улучшая его читабельность.

Поддержка типов union
В PHP 8 разработчики могут указывать, что аргумент функции или возвращаемое значение может быть одним из нескольких возможных типов, а не только одним конкретным типом. Например, функция, ожидающая в качестве аргумента целое число или число float, теперь может быть определена как принимающая тип union «int|float».
Аналогично, функция, возвращающая строку или null, может быть определена как возвращающая тип union «string|null». Union-типы обеспечивают большую гибкость в определении функций и могут облегчить чтение и поддержку кода.

Поддержка выражений Match
Выражение Match позволяет сопоставить заданное значение с набором возможных случаев и соответствующих им действий. Синтаксис похож на оператор switch, но с большей гибкостью в плане шаблонов, которые могут быть сопоставлены. Выражения Match могут применять различные типы шаблонов, такие как литералы, переменные и другие, а также иметь несколько условий и действий в одном операторе. Таким образом, Match-выражения ― это полезный инструмент для оптимизации кода.

JIT-компилятор
JIT, или Just-In-Time компиляция ― это технология, значительно повышающая скорость выполнения кода в языках программирования. Механизм JIT в PHP 8 компилирует машинный код непосредственно перед его исполнением. Движок JIT также способен определять части кода, которые выполняются чаще всего, и компилировать их в машинный код, повышая общую производительность приложения.
Особенно значительный прирост скорости получается в тех случаях, когда нужно выполнять много математических операций. Хотя JIT-компиляция не включена по умолчанию в PHP 8, ее можно легко включить, изменив настройки конфигурации.

Слабые карты (weak maps)
Слабые карты предоставляют возможность связывать объекты с метаданными, не мешая при этом сборщику мусора удалять объекты из памяти. Это полезно в сценариях, когда вам нужно связать некоторые данные с объектом, но при этом автоматически удалять объект, когда он больше не нужен. Данные также будут автоматически удалены вместе с объектом. Это поможет предотвратить утечки памяти и повысить производительность в долгоиграющих процессах. Например, слабая карта может быть использована для запоминания результата вычислений.

Как использовать преимущества PHP 8 для лучшей производительности?
Вот несколько советов, как вы можете оптимизировать производительность PHP 8:
Используйте кэширование OpCode
В PHP 8 появился новый кэш OpCode под названием «Zend OPCache», который может значительно ускорить работу вашего приложения. Обязательно включите его в файле php.ini и настройте параметры под ваше конкретное приложение.
Оптимизируйте запросы к базе данных
Запросы к базе данных часто являются узким местом в веб-приложениях. Убедитесь, что вы используете максимально эффективные запросы, с надлежащим индексированием и кэшированием, где это возможно. Кроме того, можно использовать конструктор запросов, который генерирует оптимизированные запросы.
Сократите количество вызовов функций
Вызовы функций могут снизить производительность вашего приложения, особенно если вы вызываете одну и ту же функцию несколько раз. Рассмотрите возможность кэширования результатов вызовов функций или, по возможности, объедините их в один вызов.
Используйте lazy loading
Загрузка ресурсов только тогда, когда они необходимы (lazy loading) может значительно повысить производительность вашего приложения. Например, вы можете использовать методы «ленивой» загрузки для таких объектов, как изображения, видео и большие наборы данных.
Минимизируйте файловый ввод-вывод
Чтение и запись файлов могут быть медленными, поэтому важно минимизировать файловый ввод-вывод, где это возможно. Рассмотрите возможность использования кэширования в памяти или базы данных для хранения часто используемых данных, а также избегайте чтения и записи файлов при каждом запросе, если это возможно.
В заключение


С выходом PHP 8 веб-разработчики получили доступ к целому ряду новых функций и улучшений, позволяющих оптимизировать безопасность, эффективность и скорость работы веб-приложений. Последняя версия включает в себя мощный JIT-компилятор, Constructor Property Promotion, а также другие значительные обновления. Создаете ли вы веб-приложение с нуля или обновляете уже существующее, новые функции PHP 8 открывают широкие возможности для повышения производительности вашего сайта, оптимизации процессов разработки и повышения удобства работы пользователей.


