Что нового в PHP 8.2: подробный обзор

Опубликовано: 2023-10-17
Поделиться в социальных профилях.

PHP, широко используемый язык серверных сценариев, постоянно развивается, чтобы соответствовать постоянно меняющимся требованиям веб-разработки. Выпуск PHP 8.2 в ноябре 2022 года принесет с собой множество интересных функций, важных обновлений и важных исправлений ошибок. В этой статье мы подробно рассмотрим примечательные аспекты нового PHP 8.2 и прольем свет на то, чего разработчики могут ожидать от этой последней версии.

Оглавление

Новые возможности

1. Перечисления: знакомство с безопасностью типов

В версии 8.2, возможно, одном из самых ожидаемых дополнений к PHP, наконец-то появилась встроенная поддержка перечислений (enums). Перечисления позволяют разработчикам определять набор именованных значений с явными типами, добавляя в PHP значительный уровень безопасности типов.

Вот простой пример того, как работают перечисления:

 enum Color { case RED; case GREEN; case BLUE; }

Перечисления также могут иметь связанные значения, что делает их универсальными для различных случаев использования. Эта функция особенно полезна для обеспечения того, чтобы ваш код оставался читаемым, удобным в обслуживании и менее подверженным ошибкам, возникающим из-за неправильного использования констант или магических чисел.

2. Продвижение конструктора: сокращение шаблонного кода

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

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

Расширение конструктора особенно ценно при работе с классами, имеющими множество свойств, поскольку оно уменьшает беспорядок в вашей кодовой базе.

3. Классы только для чтения

В PHP 8.2 классы, доступные только для чтения, позволяют разработчикам определять классы со свойствами, которые можно установить только один раз, обычно во время создания объекта. Это гарантирует, что свойства остаются постоянными на протяжении всего срока службы объекта. Свойства, доступные только для чтения, объявляются с использованием модификатора readonly и должны быть инициализированы в конструкторе класса.

В PHP 8.2 этот процесс значительно упрощается:

 class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

4. Именованные аргументы в операторах «include» и «require».

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

 include filename: 'my_file.php', once: true;

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

5. Уведомления об устаревании неявных круглых скобок

Чтобы обеспечить согласованность и читаемость кода, в PHP 8.2 введены уведомления об устаревании функций и методов, вызываемых без круглых скобок. Хотя это еще не ошибка, это служит предупреждением разработчикам о необходимости последовательного использования круглых скобок при вызове функций.

 // Deprecated usage myFunction; // Recommended usage myFunction();

Отказываясь от неявных круглых скобок, PHP стремится повысить ясность и удобство сопровождения кода.

6. Поддержка сокрытия значений конфиденциальных параметров

PHP предоставляет возможность отслеживать стек вызовов в любом состоянии программы, что особенно полезно при устранении неполадок приложений. Однако в некоторых случаях трассировки стека могут содержать конфиденциальные сведения, которые требуют сокрытия.

В PHP 8.2 будет представлен новый атрибут под названием «SensitiveParameter». Этот атрибут служит для того, чтобы скрыть конфиденциальные данные от отображения или регистрации, когда приложение обнаруживает ошибки. На практике его использование будет выглядеть следующим образом:

 function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

7. Знакомство с функцией mysqli_execute_query и методом mysqli::execute_query.

PHP, универсальный язык сценариев для веб-разработки, постоянно развивается, расширяя свои возможности и повышая простоту использования. В PHP 8.2 разработчики могут ожидать появления двух новых функций: функции mysqli_execute_query и метода mysqli::execute_query. Эти дополнения призваны оптимизировать и упростить взаимодействие с базами данных, делая работу с базами данных MySQL еще более удобной.

функция mysqli_execute_query

Функция mysqli_execute_query — мощное дополнение к расширению PHP MySQLi. Он специально предназначен для выполнения SQL-запросов к базе данных MySQL. Эта функция предлагает простой и эффективный способ отправки SQL-запросов и получения результатов. Вот краткий пример его использования:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();

Функция mysqli_execute_query упрощает процесс подготовки и выполнения запросов, сохраняя при этом безопасность посредством привязки параметров.

mysqli::execute_query Метод

В дополнение к новой функции в PHP 8.2 представлен метод mysqli::execute_query как часть класса MySQLi. Этот метод упрощает выполнение запросов для разработчиков, предпочитающих объектно-ориентированное программирование. Вот пример его использования:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();

Метод mysqli::execute_query предлагает объектно-ориентированный подход к выполнению запросов к базе данных, обеспечивая более интуитивно понятный интерфейс для разработчиков, предпочитающих этот стиль кодирования.

8. Разрешить использование констант в трейтах: повышение удобства повторного использования и сопровождения кода

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

Роль трейтов в PHP

Прежде чем углубляться в добавление констант в типажи, давайте кратко рассмотрим роль типажей в PHP. Трейты — это механизм повторного использования кода в языках с одним наследованием, таких как PHP. Они позволяют вам определить набор методов, которые можно повторно использовать в нескольких классах. Когда класс использует признак, он наследует методы, определенные в этом признаке, повышая модульность кода и уменьшая избыточность.

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

В этом примере признак Loggable предоставляет метод журнала, который может использоваться любым классом, включающим этот признак, улучшая удобство сопровождения и организацию кода.

Константы в трейтах: новая функция

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

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

В этом примере признак Configuration определяет константу MAX_CONNECTIONS, которая доступна в классе базы данных, использующем этот признак. Это позволяет централизовать константы конфигурации и способствует более организованной и удобной в обслуживании структуре кода.

9. Представляем новые типы дизъюнктивной нормальной формы (DNF) в PHP 8.2.

PHP, динамичный и универсальный язык сценариев, продолжает развиваться, чтобы удовлетворить постоянно растущие потребности веб-разработки. С выпуском PHP 8.2 разработчиков ждут новые типы дизъюнктивной нормальной формы (DNF). Это дополнение к языку повышает выразительность и гибкость PHP, позволяя разработчикам более эффективно работать со сложными логическими выражениями.

Понимание дизъюнктивной нормальной формы (DNF)

Прежде чем углубляться в новые типы DNF в PHP 8.2, важно понять, что представляет собой дизъюнктивная нормальная форма (DNF) в логике. ДНФ — это каноническая форма представления логических выражений, где каждое выражение представляет собой дизъюнкцию (ИЛИ) союзов (И). Проще говоря, это способ разбить сложные логические утверждения на ряд простых условий, соединенных операторами ИЛИ.

Например, логическое выражение (A AND B) OR (C AND D) находится в DNF, потому что оно является дизъюнкцией двух союзов.

Новые типы DNF в PHP 8.2

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

Вот обзор новых типов DNF и способов их использования:

1. Дизъюнктивная нормальная форма

Тип DisjunctiveNormalForm представляет логические выражения в DNF. Вы можете создавать экземпляры DisjunctiveNormalForm для инкапсуляции сложных условий:

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

В этом примере $dnfExpression представляет выражение DNF (A AND B) OR (C AND D).

2. Соединение

Тип соединения представляет собой соединение (И) одного или нескольких условий. Вы можете создавать экземпляры Conjunction для создания сложных союзов:

 $conjunction = new Conjunction('A', 'B', 'C');

Здесь $conjunction представляет собой союз (A AND B AND C).

3. Логическое значение

Тип LogicalValue представляет простые логические значения, которые могут быть истинными, ложными или переменными. Его можно использовать в сочетании с другими типами DNF для построения более сложных выражений:

 $value = new LogicalValue('A');

Здесь $value представляет логическую переменную A.

10. Знакомство с атрибутом AllowDynamicProperties: расширение гибкости PHP

Атрибут «AllowDynamicProperties» — замечательное дополнение к PHP, особенно для разработчиков, которые ценят динамическую природу языка. С помощью этого атрибута вы можете позволить объекту принимать свойства, которые не были явно определены в его классе, и манипулировать ими.

Вот простой пример применения атрибута «AllowDynamicProperties»:

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

В этом примере класс «DynamicObject» отмечен атрибутом «AllowDynamicProperties», который позволяет динамически добавлять свойства и получать к ним доступ. Такое динамическое поведение может быть особенно полезно при работе с объектами, которым необходимо адаптироваться к различным структурам данных, или при работе с данными из внешних источников, таких как API.

Устаревшие и удаленные версии PHP 8.2

  • Расширения: PHP 8.2 попрощался с несколькими устаревшими и неподдерживаемыми расширениями, включая «oci8», «mysql», «mcrypt» и «interbase». Разработчикам, использующим эти расширения, настоятельно рекомендуется перейти на современные альтернативы, чтобы обеспечить безопасность и стабильность своих приложений.
  • Функцияeach() : функцияeach() официально признана устаревшей в PHP 8.2. Эта функция использовалась для перебора массивов путем перемещения внутреннего указателя и возврата текущей пары ключ-значение. Однако у него были различные проблемы, и его в основном заменили циклы foreach, которые обеспечивают лучшую читаемость и удобство обслуживания.
  • Функция create_function() : Функция create_function() помечена как устаревшая. Эта функция использовалась для динамического создания анонимных функций, но ее использование не рекомендуется из соображений безопасности и лучших альтернатив, таких как замыкания.
  • Флаг фильтра FILTER_SANITIZE_MAGIC_QUOTES . Флаг фильтра FILTER_SANITIZE_MAGIC_QUOTES устарел. Этот флаг использовался с filter_var() для очистки ввода путем добавления косой черты перед такими символами, как одинарные и двойные кавычки. Современные лучшие практики предлагают использовать подготовленные операторы и параметризованные запросы для обработки входных данных базы данных, что делает этот флаг устаревшим.
  • Функция stristr() : Функция stristr(), выполняющая поиск подстроки в строке без учета регистра, устарела. Несмотря на то, что он по-прежнему функционирует, разработчикам рекомендуется использовать версию, нечувствительную к регистру, Stripos() или альтернативу str_contains() для большей ясности.
  • define() с аргументами-массивами . Использование define() для определения констант с массивами в качестве значений теперь устарело. Хотя константы можно было определить с помощью массивов в качестве значений, такая практика считается нетрадиционной, и константы обычно должны иметь скалярные значения.
  • Флаги SORT_NUMERIC и SORT_REGULAR . Флаги SORT_NUMERIC и SORT_REGULAR для функций сортировки, таких как sort() и usort(), устарели. Эти флаги больше не нужны, поскольку PHP автоматически определяет тип данных элементов и соответствующим образом сортирует их.

Улучшения производительности

PHP 8.2 содержит различные улучшения производительности и оптимизации. Хотя степень этих улучшений может варьироваться в зависимости от вашего конкретного варианта использования, обновление до PHP 8.2, вероятно, обеспечит некоторые заметные преимущества в производительности. Эти улучшения могут оказать существенное влияние на приложения с высоким трафиком или приложения, выполняющие ресурсоемкие задачи, делая их более отзывчивыми и эффективными.

Исправления ошибок и стабильность

Как и в любой новой версии PHP, в PHP 8.2 устранено множество ошибок и проблем со стабильностью. Эти исправления имеют решающее значение для поддержания общей надежности языка и обеспечения того, чтобы PHP продолжал оставаться надежным выбором для веб-разработки.

Часто задаваемые вопросы — новое в PHP 8.2

Почему в PHP 8.2 появились уведомления об устаревании неявных круглых скобок?

Уведомления об устаревании неявных круглых скобок способствуют единообразию стиля кода, предупреждая разработчиков об использовании круглых скобок при вызове функций. Это повышает ясность кода и удобство сопровождения.

Что такое классы только для чтения и как они работают в PHP 8.2?

Классы только для чтения в PHP 8.2 позволяют устанавливать свойства только один раз, обычно во время создания объекта, гарантируя, что они остаются постоянными на протяжении всего срока службы объекта. Свойства только для чтения объявляются с использованием модификатора readonly.

Как функция mysqli_execute_query и метод mysqli::execute_query упрощают взаимодействие с базой данных в PHP 8.2?

Эти функции упрощают процесс выполнения SQL-запросов к базе данных MySQL, обеспечивая эффективные и безопасные способы отправки запросов и получения результатов как процедурным, так и объектно-ориентированным способом.

Как атрибут «AllowDynamicProperties» повышает гибкость PHP 8.2?

Атрибут «AllowDynamicProperties» позволяет объектам принимать и манипулировать свойствами, которые не были явно определены в их классе, улучшая динамическую природу PHP.

Почему исправление ошибок и стабильность важны в PHP 8.2?

Исправления ошибок и улучшения стабильности в PHP 8.2 имеют решающее значение для поддержания общей надежности языка, гарантируя, что PHP останется надежным выбором для веб-разработки за счет устранения проблем и повышения его стабильности.

Заключение

В заключение отметим, что PHP 8.2 стал поворотной вехой в постоянно развивающейся сфере веб-разработки. Благодаря широкому спектру инновационных функций, повышенной гибкости и оптимизации производительности он отвечает растущим требованиям разработчиков по всему миру.

Введение перечислений, продвижения конструктора, классов только для чтения, именованных аргументов и атрибута AllowDynamicProperties дает разработчикам возможность писать более чистый и удобный в обслуживании код. Кроме того, новые типы дизъюнктивной нормальной формы (DNF) привносят в PHP расширенные возможности логического манипулирования, еще больше расширяя его универсальность. Однако по мере развития PHP он также прощается с устаревшими расширениями и функциями, одновременно тщательно устраняя ошибки, гарантируя, что он остается надежным и безопасным выбором для веб-разработки.

Связанный контент:

Как исправить ошибку «WordPress отключить PHP требуется обновление» (2 метода)

Журналы медленных запросов MySQL