Quoi de neuf dans PHP 8.2 : un aperçu complet
Publié: 2023-10-17PHP, le langage de script côté serveur largement utilisé, évolue constamment pour répondre aux exigences en constante évolution du développement Web. La sortie de PHP 8.2 en novembre 2022 apporte une multitude de fonctionnalités intéressantes, des dépréciations importantes et des corrections de bogues cruciales. Dans cet article, nous examinerons en profondeur les aspects notables des nouveautés de PHP 8.2, mettant en lumière ce que les développeurs peuvent attendre de cette dernière version.
Table des matières
Nouvelles fonctionnalités
1. Énumérations : présentation de la sécurité des types
Peut-être l'un des ajouts les plus attendus à PHP, la version 8.2 introduit enfin le support natif des énumérations (énumérations). Les énumérations permettent aux développeurs de définir un ensemble de valeurs nommées avec des types explicites, ajoutant ainsi une couche importante de sécurité des types à PHP.
Voici un exemple simple du fonctionnement des énumérations :
enum Color { case RED; case GREEN; case BLUE; }
Les énumérations peuvent également avoir des valeurs associées, ce qui les rend polyvalentes pour divers cas d'utilisation. Cette fonctionnalité est particulièrement bénéfique pour garantir que votre code reste lisible, maintenable et moins sujet aux bogues résultant d'une mauvaise utilisation de constantes ou de nombres magiques.
2. Promotion des constructeurs : réduire le code standard
PHP 8.2 introduit la promotion des constructeurs, une fonctionnalité visant à simplifier les définitions de classes et à réduire le code passe-partout. Avec la promotion du constructeur, vous pouvez déclarer et initialiser les propriétés de classe directement dans la liste des paramètres du constructeur. Cela élimine le besoin de déclarations de propriétés distinctes, ce qui rend votre code plus concis et plus facile à maintenir.
class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }
La promotion du constructeur est particulièrement utile lorsqu'il s'agit de classes possédant de nombreuses propriétés, car elle réduit l'encombrement de votre base de code.
3. Cours en lecture seule
Dans PHP 8.2, les classes en lecture seule permettent aux développeurs de définir des classes avec des propriétés qui ne peuvent être définies qu'une seule fois, généralement lors de la création d'un objet. Cela garantit que les propriétés restent constantes tout au long de la durée de vie de l'objet. Les propriétés en lecture seule sont déclarées à l'aide du modificateur readonly et doivent être initialisées dans le constructeur de classe.
Avec PHP 8.2, le processus est complètement simplifié :
class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');
4. Arguments nommés dans les instructions "include" et "require"
Dans PHP 8.2, les arguments nommés peuvent désormais être utilisés lors de l'inclusion ou de la demande de fichiers. Cette fonctionnalité améliore la lisibilité du code, en particulier lorsqu'il s'agit de fonctions acceptant plusieurs arguments.
include filename: 'my_file.php', once: true;
En fournissant des noms pour ces arguments, vous rendez votre code plus explicite et réduisez le risque d'introduction d'erreurs dues à un ordre incorrect des arguments.
5. Avis de dépréciation pour les parenthèses implicites
Pour favoriser la cohérence et la lisibilité du code, PHP 8.2 introduit des avis de dépréciation pour les fonctions et méthodes appelées sans parenthèses. Bien qu'il ne s'agisse pas encore d'une erreur, cela sert d'avertissement aux développeurs pour qu'ils adoptent la pratique recommandée consistant à utiliser systématiquement des parenthèses lors de l'appel de fonctions.
// Deprecated usage myFunction; // Recommended usage myFunction();
En décourageant les parenthèses implicites, PHP vise à améliorer la clarté et la maintenabilité du code.
6. Prise en charge de la dissimulation des valeurs de paramètres sensibles
PHP offre la possibilité de surveiller la pile d'appels à n'importe quel état donné du programme, ce qui s'avère particulièrement utile lors du dépannage des problèmes d'application. Cependant, dans certains cas, les traces de pile peuvent contenir des détails confidentiels qui méritent d'être dissimulés.
Dans PHP 8.2, un nouvel attribut nommé "SensitiveParameter" sera introduit. Cet attribut sert à masquer l'affichage ou la journalisation des données sensibles lorsqu'une application rencontre des erreurs. Concrètement, son utilisation se présentera comme suit :
function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');
7. Introduction de la fonction mysqli_execute_query et de la méthode mysqli::execute_query
PHP, le langage de script polyvalent pour le développement Web, évolue continuellement pour améliorer ses capacités et sa facilité d'utilisation. Dans PHP 8.2, les développeurs peuvent anticiper l'introduction de deux nouvelles fonctionnalités : la fonction mysqli_execute_query et la méthode mysqli::execute_query. Ces ajouts sont conçus pour rationaliser et simplifier les interactions avec les bases de données, rendant encore plus pratique le travail avec les bases de données MySQL.
Fonction mysqli_execute_query
La fonction mysqli_execute_query est un ajout puissant à l'extension MySQLi de PHP. Il est spécifiquement conçu pour exécuter des requêtes SQL sur une base de données MySQL. Cette fonction offre un moyen simple et efficace d'envoyer des requêtes SQL et de récupérer les résultats. Voici un bref exemple de son utilisation :
$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();
La fonction mysqli_execute_query rationalise le processus de préparation et d'exécution des requêtes tout en maintenant la sécurité grâce à la liaison de paramètres.
Méthode mysqli ::execute_query
En plus de la nouvelle fonction, PHP 8.2 introduit la méthode mysqli::execute_query dans le cadre de la classe MySQLi. Cette méthode simplifie l'exécution des requêtes pour les développeurs qui préfèrent la programmation orientée objet. Voici un exemple de son utilisation :
$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();
La méthode mysqli::execute_query offre une approche orientée objet pour exécuter des requêtes de base de données, offrant une expérience plus intuitive aux développeurs qui préfèrent ce style de codage.
8. Autoriser les constantes dans les traits : améliorer la réutilisabilité et la maintenabilité du code
Les traits sont une fonctionnalité précieuse dans les langages de programmation modernes, notamment PHP, permettant aux développeurs de réutiliser le code dans différentes classes sans avoir besoin d'héritage. Les traits PHP fournissent principalement des méthodes, mais dans PHP 8.2, une amélioration notable est introduite : la possibilité de définir des constantes dans les traits. Cette fonctionnalité vise à améliorer l'organisation, la réutilisabilité et la maintenabilité du code, offrant ainsi aux développeurs plus de flexibilité dans la conception de leur code.
Le rôle des traits en PHP
Avant d'aborder l'ajout de constantes dans les traits, revenons brièvement sur le rôle des traits en PHP. Les traits sont un mécanisme de réutilisation du code dans les langages à héritage unique comme PHP. Ils vous permettent de définir un ensemble de méthodes pouvant être réutilisées dans plusieurs classes. Lorsqu'une classe utilise un trait, elle hérite des méthodes définies dans ce trait, améliorant ainsi la modularité du code et réduisant la redondance.
trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}
Dans cet exemple, le trait Loggable fournit une méthode de journalisation qui peut être utilisée par n'importe quelle classe intégrant le trait, améliorant ainsi la maintenabilité et l'organisation du code.
Constantes dans les traits : une nouvelle fonctionnalité
Avec PHP 8.2, les développeurs peuvent désormais définir des constantes dans les traits, ce qui n'était pas possible dans les versions précédentes de PHP. Les constantes des traits fonctionnent de la même manière que les constantes des classes, mais elles sont accessibles dans les classes qui utilisent le trait.
trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }
Dans cet exemple, le trait Configuration définit une constante MAX_CONNECTIONS, accessible dans la classe Database qui utilise le trait. Cela permet la centralisation des constantes de configuration et favorise une structure de code plus organisée et maintenable.
9. Présentation de nouveaux types de forme normale disjonctive (DNF) dans PHP 8.2
PHP, un langage de script dynamique et polyvalent, continue d'évoluer pour répondre aux demandes toujours croissantes du développement Web. Avec la sortie de PHP 8.2, les développeurs vont se régaler avec l'introduction de nouveaux types Disjunctive Normal Form (DNF). Cet ajout au langage améliore l'expressivité et la flexibilité de PHP, permettant aux développeurs de travailler plus efficacement avec des expressions logiques complexes.
Comprendre la forme normale disjonctive (DNF)
Avant de se plonger dans les nouveaux types DNF dans PHP 8.2, il est essentiel de comprendre ce que représente la forme normale disjonctive (DNF) en logique. DNF est une forme canonique de représentation d'expressions logiques où chaque expression est une disjonction (OU) de conjonctions (ET). En termes plus simples, il s'agit d'un moyen de décomposer des instructions logiques complexes en une série de conditions simples reliées par des opérateurs OU.
Par exemple, l'expression logique (A ET B) OU (C ET D) est en DNF car c'est une disjonction de deux conjonctions.
Nouveaux types DNF dans PHP 8.2
PHP 8.2 introduit de nouveaux types DNF comme moyen de travailler et de manipuler les expressions logiques de manière plus intuitive. Ces types DNF fournissent une abstraction de niveau supérieur pour gérer une logique complexe, permettant ainsi aux développeurs de gérer plus facilement des conditions complexes dans leur code.
Voici un aperçu des nouveaux types DNF et de la manière dont ils peuvent être utilisés :
1. DisjonctiveForme Normale
Le type DisjunctiveNormalForm représente des expressions logiques dans DNF. Vous pouvez créer des instances DisjunctiveNormalForm pour encapsuler des conditions complexes :
$dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);
Dans cet exemple, $dnfExpression représente l'expression DNF (A AND B) OR (C AND D).
2. Conjonction
Le type Conjonction représente la conjonction (AND) d’une ou plusieurs conditions. Vous pouvez créer des instances de Conjonction pour créer des conjonctions complexes :
$conjunction = new Conjunction('A', 'B', 'C');
Ici, $conjonction représente la conjonction (A ET B ET C).
3. Valeur Logique
Le type LogicalValue représente des valeurs logiques simples, qui peuvent être vraies, fausses ou une variable. Il peut être utilisé conjointement avec d’autres types DNF pour créer des expressions plus complexes :
$value = new LogicalValue('A');
Ici, $value représente la variable logique A.
10. Présentation de l'attribut AllowDynamicProperties : extension de la flexibilité en PHP
L'attribut "AllowDynamicProperties" est un ajout remarquable à PHP, notamment pour les développeurs qui apprécient la nature dynamique du langage. Avec cet attribut, vous pouvez permettre à un objet d'accepter et de manipuler des propriétés qui n'ont pas été explicitement définies dans sa classe.
Voici un exemple simple de la façon dont l'attribut « AllowDynamicProperties » peut être appliqué :
class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;
Dans cet exemple, la classe « DynamicObject » est marquée avec l'attribut « AllowDynamicProperties », qui permet d'ajouter et d'accéder dynamiquement aux propriétés. Ce comportement dynamique peut être particulièrement utile lorsqu'il s'agit d'objets qui doivent s'adapter à diverses structures de données ou lorsque vous travaillez avec des données provenant de sources externes, telles que des API.
Dépréciations et suppressions dans PHP 8.2
- Extensions : PHP 8.2 a fait ses adieux à plusieurs extensions obsolètes et non maintenues, notamment "oci8", "mysql", "mcrypt" et "interbase". Les développeurs s'appuyant sur ces extensions sont fortement encouragés à migrer vers des alternatives modernes pour garantir la sécurité et la stabilité de leurs applications.
- Fonction each() : La fonction each() est désormais officiellement obsolète dans PHP 8.2. Cette fonction a été utilisée pour parcourir les tableaux en avançant le pointeur interne et en renvoyant la paire clé-valeur actuelle. Cependant, il présentait divers problèmes et a été largement remplacé par des boucles foreach, qui offrent une meilleure lisibilité et maintenabilité.
- Fonction create_function() : La fonction create_function() est marquée comme obsolète. Cette fonction a été utilisée pour créer dynamiquement des fonctions anonymes, mais elle n'a pas été recommandée en raison de problèmes de sécurité et de meilleures alternatives telles que les fermetures.
- Indicateur de filtre FILTER_SANITIZE_MAGIC_QUOTES : L'indicateur de filtre FILTER_SANITIZE_MAGIC_QUOTES est obsolète. Cet indicateur a été utilisé avec filter_var() pour nettoyer les entrées en ajoutant des barres obliques avant les caractères comme les guillemets simples et les guillemets doubles. Les meilleures pratiques modernes suggèrent d'utiliser des instructions préparées et des requêtes paramétrées pour gérer les entrées de base de données, ce qui rend cet indicateur obsolète.
- Fonction stristr() : La fonction stristr(), qui effectue une recherche insensible à la casse d'une sous-chaîne dans une chaîne, est obsolète. Bien qu'il soit toujours fonctionnel, les développeurs sont encouragés à utiliser la version insensible à la casse, stripos(), ou les alternatives str_contains() pour une meilleure clarté.
- Définir() avec les arguments du tableau : L'utilisation de définir() pour définir des constantes avec des tableaux comme valeurs est désormais obsolète. Bien qu'il soit possible de définir des constantes avec des tableaux comme valeurs, cette pratique est considérée comme non conventionnelle et les constantes doivent généralement avoir des valeurs scalaires.
- Indicateurs SORT_NUMERIC et SORT_REGULAR : Les indicateurs SORT_NUMERIC et SORT_REGULAR pour les fonctions de tri comme sort() et usort() sont obsolètes. Ces indicateurs ne sont plus nécessaires, car PHP détecte automatiquement le type de données des éléments et les trie en conséquence.
Amélioration des performances
PHP 8.2 apporte diverses améliorations et optimisations de performances sous le capot. Bien que l'étendue de ces améliorations puisse varier en fonction de votre cas d'utilisation spécifique, la mise à niveau vers PHP 8.2 apportera probablement des avantages notables en termes de performances. Ces améliorations peuvent avoir un impact significatif sur les applications à fort trafic ou celles effectuant des tâches gourmandes en ressources, les rendant plus réactives et efficaces.
Corrections de bugs et stabilité
Comme pour toute nouvelle version de PHP, PHP 8.2 corrige de nombreux bugs et problèmes de stabilité. Ces correctifs sont cruciaux pour maintenir la fiabilité globale du langage et garantir que PHP continue d'être un choix solide pour le développement Web.
FAQ - Nouveau dans PHP 8.2
Pourquoi les avis de dépréciation pour les parenthèses implicites sont-ils introduits dans PHP 8.2 ?
Les avis de dépréciation pour les parenthèses implicites encouragent un style de code cohérent en avertissant les développeurs d'utiliser des parenthèses lors de l'appel de fonctions. Cela améliore la clarté et la maintenabilité du code.
Que sont les classes en lecture seule et comment fonctionnent-elles en PHP 8.2 ?
Les classes en lecture seule dans PHP 8.2 permettent de définir les propriétés une seule fois, généralement lors de la création d'un objet, garantissant ainsi qu'elles restent constantes tout au long de la durée de vie de l'objet. Les propriétés en lecture seule sont déclarées à l'aide du modificateur readonly.
Comment la fonction mysqli_execute_query et la méthode mysqli::execute_query simplifient-elles les interactions avec les bases de données dans PHP 8.2 ?
Ces fonctionnalités rationalisent le processus d'exécution de requêtes SQL sur une base de données MySQL, offrant des moyens efficaces et sécurisés d'envoyer des requêtes et de récupérer des résultats, soit de manière procédurale, soit de manière orientée objet.
Comment l'attribut « AllowDynamicProperties » augmente-t-il la flexibilité dans PHP 8.2 ?
L'attribut "AllowDynamicProperties" permet aux objets d'accepter et de manipuler des propriétés qui n'ont pas été explicitement définies dans leur classe, améliorant ainsi la nature dynamique de PHP.
Pourquoi la correction des bugs et la stabilité sont-elles importantes dans PHP 8.2 ?
Les corrections de bugs et les améliorations de stabilité dans PHP 8.2 sont cruciales pour maintenir la fiabilité globale du langage, garantissant que PHP reste un choix solide pour le développement Web en résolvant les problèmes et en améliorant sa stabilité.
Conclusion
En conclusion, PHP 8.2 apparaît comme une étape cruciale dans le paysage en constante évolution du développement Web. Avec un large éventail de fonctionnalités innovantes, une flexibilité améliorée et des optimisations de performances, il répond aux demandes évolutives des développeurs du monde entier.
L'introduction d'énumérations, de promotion de constructeur, de classes en lecture seule, d'arguments nommés et de l'attribut AllowDynamicProperties permet aux développeurs d'écrire un code plus propre et plus maintenable. De plus, les nouveaux types Disjonctive Normal Form (DNF) apportent des capacités avancées de manipulation logique à PHP, élargissant encore sa polyvalence. Cependant, à mesure que PHP progresse, il fait également ses adieux aux extensions et fonctions obsolètes tout en corrigeant avec diligence les bogues, garantissant ainsi qu'il reste un choix fiable et sécurisé pour le développement Web.
Contenu connexe :
Comment réparer l'erreur « WordPress Désactiver la mise à jour PHP requise » (2 méthodes)
Journaux de requêtes lentes MySQL