{"id":60521,"date":"2022-08-11T13:23:05","date_gmt":"2022-08-11T12:23:05","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=60521&#038;preview=true&#038;preview_id=60521"},"modified":"2023-08-22T12:34:13","modified_gmt":"2023-08-22T11:34:13","slug":"php-8-2","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/","title":{"rendered":"Quoi de neuf dans PHP 8.2 &#8211; Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations, changements et autres"},"content":{"rendered":"<p>PHP 8.2 s&rsquo;appuie sur les nouvelles bases \u00e9tablies par <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8\/\">PHP 8.0<\/a> et <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8-1\/\">PHP 8.1<\/a>.\u00a0Maintenant que PHP 8.2 est sorti, nous allons couvrir les nouveaut\u00e9s de <a href=\"https:\/\/www.php.net\/releases\/8.2\/en.php\">PHP 8.2<\/a> en d\u00e9tail &#8211; depuis ses nouvelles fonctionnalit\u00e9s et am\u00e9liorations jusqu&rsquo;aux d\u00e9pr\u00e9ciations et changements mineurs, nous allons tout passer en revue.<\/p>\n<p>Comme PHP 8.2 est entr\u00e9 dans sa p\u00e9riode de gel des fonctionnalit\u00e9s le 19 juillet 2022, vous pouvez vous attendre \u00e0 aucun ajout significatif \u00e0 cette liste.<\/p>\n<p>Excit\u00e9 ? Nous le sommes aussi.<\/p>\n<p>C&rsquo;est parti !<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Nouvelles fonctionnalit\u00e9s et am\u00e9liorations de PHP 8.2<\/h2>\n<p>Commen\u00e7ons par explorer toutes les derni\u00e8res fonctionnalit\u00e9s de PHP 8.2. C&rsquo;est une liste assez longue :<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"15\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Nouvelles classes <code>readonly<\/code><\/h3>\n<p>PHP 8.1 a introduit la <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8-1\/#new-readonly-properties\">fonctionnalit\u00e9<code>readonly<\/code> pour les propri\u00e9t\u00e9s des classes<\/a>. Maintenant, PHP 8.2 ajoute le support pour <a href=\"https:\/\/wiki.php.net\/rfc\/readonly_classes\">d\u00e9clarer la classe enti\u00e8re comme <code>readonly<\/code><\/a>.<\/p>\n<p>Si vous d\u00e9clarez une classe comme <code>readonly<\/code>, toutes ses propri\u00e9t\u00e9s h\u00e9riteront automatiquement de la fonctionnalit\u00e9 <code>readonly<\/code>. Ainsi, d\u00e9clarer une classe <code>readonly<\/code> revient \u00e0 d\u00e9clarer chaque propri\u00e9t\u00e9 de classe comme <code>readonly<\/code>.<\/p>\n<p>Par exemple, avec PHP 8.1, vous deviez \u00e9crire ce code fastidieux pour d\u00e9clarer toutes les propri\u00e9t\u00e9s de classe comme <code>readonly<\/code>:<\/p>\n<pre><code class=\"language-php\">class MyClass\n{\npublic readonly string $myValue,\npublic readonly int $myOtherValue\npublic readonly string $myAnotherValue\npublic readonly int $myYetAnotherValue\n}<\/code><\/pre>\n<p>Imaginez la m\u00eame chose avec beaucoup plus de propri\u00e9t\u00e9s. Maintenant, avec PHP 8.2, vous pouvez simplement \u00e9crire ceci :<\/p>\n<pre><code class=\"language-php\">readonly class MyClass\n{\npublic string $myValue,\npublic int $myOtherValue\npublic string $myAnotherValue\npublic int $myYetAnotherValue\n}<\/code><\/pre>\n<p>Vous pouvez \u00e9galement d\u00e9clarer des classes abstraites ou finales comme <code>readonly<\/code>. Ici, l&rsquo;ordre des mots-cl\u00e9s n&rsquo;a pas d&rsquo;importance.<\/p>\n<pre><code class=\"language-php\">abstract readonly class Free {}\nfinal readonly class Dom {}<\/code><\/pre>\n<p>Vous pouvez \u00e9galement d\u00e9clarer une classe <code>readonly<\/code> sans propri\u00e9t\u00e9s. Effectivement, cela emp\u00eache les propri\u00e9t\u00e9s dynamiques tout en permettant aux classes filles de d\u00e9clarer explicitement leurs propri\u00e9t\u00e9s <code>readonly<\/code>.<\/p>\n<p>Ensuite, les classes <code>readonly<\/code> ne peuvent contenir que des propri\u00e9t\u00e9s typ\u00e9es &#8211; la m\u00eame r\u00e8gle s&rsquo;applique \u00e0 la d\u00e9claration des propri\u00e9t\u00e9s individuelles <strong>readonly<\/strong>.<\/p>\n<p>Vous pouvez utiliser la propri\u00e9t\u00e9 de type <code>mixed<\/code> si vous ne pouvez pas d\u00e9clarer une propri\u00e9t\u00e9 strictement typ\u00e9e.<\/p>\n<p>Si vous essayez de d\u00e9clarer une classe <code>readonly<\/code> sans propri\u00e9t\u00e9 typ\u00e9e, vous obtiendrez une erreur fatale :<\/p>\n<pre><code class=\"language-php\">readonly class Type {\n    public $nope;\n}\nFatal error: Readonly property Type::$nope must have type in ... on line ... <\/code><\/pre>\n<p>De plus, vous ne pouvez pas d\u00e9clarer <code>readonly<\/code> pour certaines fonctionnalit\u00e9s de PHP :<\/p>\n<ul>\n<li><strong>Enums <\/strong>(car <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8-1\/#enums\">ils ne peuvent contenir aucune propri\u00e9t\u00e9<\/a>)<\/li>\n<li><strong>Traits<\/strong><\/li>\n<li><strong>Interfaces<\/strong><\/li>\n<\/ul>\n<p>Tenter de d\u00e9clarer l&rsquo;une de ces fonctionnalit\u00e9s comme <code>readonly<\/code> entra\u00eenera une erreur d&rsquo;analyse.<\/p>\n<pre><code class=\"language-php\">readonly interface Destiny {}\nParse error: syntax error, unexpected token \"interface\", expecting \"abstract\" or \"final\" or \"readonly\" or \"class\" in ... on line ...<\/code><\/pre>\n<p>Comme c&rsquo;est le cas pour tous les mots-cl\u00e9s PHP, le mot-cl\u00e9 <code>readonly<\/code> n&rsquo;est pas sensible \u00e0 la casse.<\/p>\n<p>PHP 8.2 d\u00e9pr\u00e9cie \u00e9galement les propri\u00e9t\u00e9s dynamiques (nous y reviendrons plus tard). Mais vous ne pouvez pas emp\u00eacher les propri\u00e9t\u00e9s dynamiques d&rsquo;\u00eatre ajout\u00e9es \u00e0 une classe. Cependant, si vous le faites pour une classe <code>readonly<\/code>, vous obtiendrez une erreur fatale.<\/p>\n<pre><code class=\"language-php\">Fatal error: Readonly property Test::$test must have type in ... on line ...<\/code><\/pre>\n<h3>Autoriser <code>true<\/code>, <code>false<\/code>, et <code>null<\/code> comme types autonomes<\/h3>\n<p>PHP inclut d\u00e9j\u00e0 des types scalaires comme <code>int<\/code>, <code>string<\/code>, et <code>bool<\/code>. Cela a \u00e9t\u00e9 \u00e9tendu dans PHP 8.0 avec l&rsquo;ajout de <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8\/#union-types-2-0\">types union<\/a>, permettant aux valeurs d&rsquo;\u00eatre de diff\u00e9rents types. La m\u00eame RFC autorise \u00e9galement l&rsquo;utilisation de <code>false<\/code> et <code>null<\/code> comme partie d&rsquo;un type union &#8211; ils ne sont pas autoris\u00e9s comme types autonomes, cependant.<\/p>\n<p>Si vous essayez de d\u00e9clarer <code>false<\/code> ou <code>null<\/code> en tant que types autonomes &#8211; sans qu&rsquo;ils fassent partie d&rsquo;un type d&rsquo;union &#8211; vous obtenez une erreur fatale.<\/p>\n<pre><code class=\"language-php\">function spam(): null {}\nfunction eggs(): false {}\n\nFatal error: Null can not be used as a standalone type in ... on line ...\nFatal error: False can not be used as a standalone type in ... on line ...<\/code><\/pre>\n<p>Pour \u00e9viter ce sc\u00e9nario, PHP 8.2 ajoute la possibilit\u00e9 d&rsquo;utiliser <a href=\"https:\/\/wiki.php.net\/rfc\/null-false-standalone-types\"><code>false<\/code> et <code>null<\/code><\/a> comme types autonomes. Avec cet ajout, le syst\u00e8me de type de PHP est plus expressif et plus complet. Vous pouvez maintenant d\u00e9clarer pr\u00e9cis\u00e9ment les types de retour, de param\u00e8tre et de propri\u00e9t\u00e9.<\/p>\n<p>De plus, PHP n&rsquo;inclut toujours pas de type <code>true<\/code>, qui semble \u00eatre la contrepartie naturelle du type <code>false<\/code>. PHP 8.2 corrige cela et <a href=\"https:\/\/wiki.php.net\/rfc\/true-type\">ajoute \u00e9galement le support du type <code>true<\/code><\/a>. Il ne permet pas la coercition, exactement comme le type <code>false<\/code>.<\/p>\n<p>Les deux types <code>true<\/code> et <code>false<\/code> sont essentiellement un type d&rsquo;union du type <code>bool<\/code> de PHP. Pour \u00e9viter toute redondance, vous ne pouvez pas d\u00e9clarer ces trois types ensemble dans un type union. Cela entra\u00eenerait une erreur fatale \u00e0 la compilation.<\/p>\n<h3>Types de forme normale disjonctive (DNF)<\/h3>\n<p>La <a href=\"https:\/\/en.wikipedia.org\/wiki\/Disjunctive_normal_form\">forme normale disjonctive (Disjunctive Normal Form ou DNF)<\/a> est un moyen normalis\u00e9 d&rsquo;organiser les expressions bool\u00e9ennes. Elle consiste en une disjonction de conjonctions &#8211; en termes bool\u00e9ens, c&rsquo;est un <strong>OR de AND<\/strong>.<\/p>\n<p>L&rsquo;application de la DNF aux d\u00e9clarations de type permet d&rsquo;\u00e9crire de mani\u00e8re standard des \u00a0<a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8-1\/#pure-intersection-types\">types combin\u00e9s Union et Intersection<\/a> que l&rsquo;analyseur peut g\u00e9rer. La <a href=\"https:\/\/wiki.php.net\/rfc\/dnf_types\">nouvelle fonctionnalit\u00e9 de types DNF<\/a>\u00a0de PHP 8.2 est simple mais puissante si elle est utilis\u00e9e correctement.<\/p>\n<p>La RFC donne l&rsquo;exemple suivant. Il suppose que les d\u00e9finitions d&rsquo;interface et de classe suivantes existent d\u00e9j\u00e0 :<\/p>\n<pre><code class=\"language-php\">interface A {}\ninterface B {}\ninterface C extends A {}\ninterface D {}\n\nclass W implements A {}\nclass X implements B {}\nclass Y implements A, B {}\nclass Z extends Y implements C {}<\/code><\/pre>\n<p>Avec les types DNF, vous pouvez effectuer des d\u00e9clarations de type pour les propri\u00e9t\u00e9s, les param\u00e8tres et les valeurs de retour comme suit :<\/p>\n<pre><code class=\"language-php\">\/\/ Accepts an object that implements both A and B,\n\/\/ OR an object that implements D\n(A&B)|D\n\n\/\/ Accepts an object that implements C, \n\/\/ OR a child of X that also implements D,\n\/\/ OR null\nC|(X&D)|null\n\n\/\/ Accepts an object that implements all three of A, B, and D, \n\/\/ OR an int, \n\/\/ OR null.\n(A&B&D)|int|null<\/code><\/pre>\n<p>Dans certains cas, les propri\u00e9t\u00e9s peuvent ne pas \u00eatre sous des formes DNF. Les d\u00e9clarer comme telles entra\u00eenera une erreur d&rsquo;analyse. Mais vous pouvez toujours les r\u00e9\u00e9crire comme :<\/p>\n<pre><code class=\"language-php\">A&(B|D)\n\/\/ Can be rewritten as (A&B)|(A&D)\n\nA|(B&(D|W)|null)\n\/\/ Can be rewritten as A|(B&D)|(B&W)|null<\/code><\/pre>\n<p>Vous devez noter que chaque segment d&rsquo;un type DNF doit \u00eatre unique. Par exemple, d\u00e9clarer <code>(A&B)|(B&A)<\/code> n&rsquo;est pas valable car les deux segments <strong>OR <\/strong>sont logiquement les m\u00eames.<\/p>\n<p>De plus, les segments qui sont des sous-ensembles stricts d&rsquo;un autre segment ne sont pas autoris\u00e9s non plus. En effet, le sur-ensemble contient d\u00e9j\u00e0 toutes les instances du sous-ensemble, ce qui rend l&rsquo;utilisation de la DNF superflue.<\/p>\n<h3>Expurgez les param\u00e8tres sensibles dans les Back Traces<\/h3>\n<p>Comme presque tous les <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleur-langage-programmation-apprendre\/\">langages de programmation<\/a>, <a href=\"https:\/\/kinsta.com\/php\/\">PHP<\/a> permet de tracer sa pile d&rsquo;appels \u00e0 tout moment de l&rsquo;ex\u00e9cution du code. Le tra\u00e7age de la pile facilite le d\u00e9bogage du code pour corriger les erreurs et les goulots d&rsquo;\u00e9tranglement des performances. Il constitue l&rsquo;\u00e9pine dorsale d&rsquo;outils comme <a href=\"https:\/\/kinsta.com\/fr\/outil-apm\/\">Kinsta APM<\/a>, notre <a href=\"https:\/\/kinsta.com\/fr\/blog\/application-surveillance-performance\/\">outil de surveillance des performances<\/a> con\u00e7u sur mesure pour les sites WordPress.<\/p>\n<figure id=\"attachment_121608\" aria-describedby=\"caption-attachment-121608\" style=\"width: 1100px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-121608 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/04\/Kinsta-APM-WooCommerce-Admin-Slow-Transactions.jpg\" alt=\"Suivi des transactions lentes de WooCommerce avec Kinsta APM.\" width=\"1100\" height=\"659\"><figcaption id=\"caption-attachment-121608\" class=\"wp-caption-text\">Suivi des transactions lentes de WooCommerce avec Kinsta APM.<\/figcaption><\/figure>\n<p>L&rsquo;ex\u00e9cution d&rsquo;un suivi de pile n&rsquo;interrompt pas l&rsquo;ex\u00e9cution du programme. G\u00e9n\u00e9ralement, la plupart des traces de pile s&rsquo;ex\u00e9cutent en arri\u00e8re-plan et sont enregistr\u00e9es silencieusement &#8211; pour une inspection ult\u00e9rieure si n\u00e9cessaire.<\/p>\n<p>Cependant, certaines de ces traces de pile PHP d\u00e9taill\u00e9es peuvent constituer un inconv\u00e9nient si vous les partagez avec des services tiers &#8211; g\u00e9n\u00e9ralement pour l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/wordpress-logs-erreurs-acces\/\">analyse des journaux d&rsquo;erreurs<\/a>, le suivi des erreurs, etc. Ces traces de pile peuvent inclure des informations sensibles telles que des noms d&rsquo;utilisateur, des mots de passe et des variables d&rsquo;environnement.<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/redact_parameters_in_back_traces\">Cette proposition de RFC<\/a> donne un tel exemple :<\/p>\n<blockquote><p>Un \u00ab contrevenant \u00bb commun est PDO qui prend le mot de passe de la base de donn\u00e9es comme param\u00e8tre de constructeur et tente imm\u00e9diatement de se connecter \u00e0 la base de donn\u00e9es dans le constructeur, au lieu d&rsquo;avoir un constructeur pur et une m\u00e9thode <strong>-&gt;connect() s\u00e9par\u00e9e<\/strong>. Ainsi, lorsque la connexion \u00e0 la base de donn\u00e9es \u00e9choue, la trace de la pile comprendra le mot de passe de la base de donn\u00e9es :<\/p>\n<pre><code class=\"language-php\">PDOException: SQLSTATE[HY000] [2002] No such file or directory in \/var\/www\/html\/test.php:3\nStack trace: #0 \/var\/www\/html\/test.php(3): PDO-&gt;__construct('mysql:host=loca...', 'root', 'password')\n#1 {main}<\/code><\/pre>\n<\/blockquote>\n<p>PHP 8.2 vous permet de <a href=\"https:\/\/wiki.php.net\/rfc\/redact_parameters_in_back_traces\">marquer de tels param\u00e8tres sensibles<\/a> avec un nouvel attribut <code>\\SensitiveParameter<\/code>. Tout param\u00e8tre marqu\u00e9 sensible ne sera pas list\u00e9 dans vos back traces. Ainsi, vous pouvez les partager sans soucis avec des services tiers.<\/p>\n<p>Voici un exemple simple avec un seul param\u00e8tre sensible :<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nfunction example(\n    $ham,\n    #[\\SensitiveParameter] $eggs,\n    $butter\n) {\n    throw new \\Exception('Error');\n}\n\nexample('ham', 'eggs', 'butter');\n\n\/*\nFatal error: Uncaught Exception: Error in test.php:8\nStack trace:\n#0 test.php(11): test('ham', Object(SensitiveParameterValue), 'butter')\n#1 {main}\nthrown in test.php on line 8\n*\/<\/code><\/pre>\n<p>Lorsque vous g\u00e9n\u00e9rez une trace arri\u00e8re, tout param\u00e8tre avec l&rsquo;attribut <code>\\SensitiveParameter<\/code> sera remplac\u00e9 par un objet <code>\\SensitiveParameterValue<\/code>, et sa valeur r\u00e9elle ne sera jamais stock\u00e9e dans la trace. L&rsquo;objet <code>SensitiveParameterValue<\/code> encapsule la valeur r\u00e9elle du param\u00e8tre &#8211; si vous en avez besoin pour une raison quelconque.<\/p>\n<h3>Nouvelle fonction <code>mysqli_execute_query<\/code> et m\u00e9thode <code>mysqli::execute_query<\/code><\/h3>\n<p>Avez-vous d\u00e9j\u00e0 utilis\u00e9 la fonction <code>mysqli_query()<\/code> avec des valeurs utilisateur dangereusement \u00e9chapp\u00e9es, juste pour ex\u00e9cuter une requ\u00eate MySQLi param\u00e9tr\u00e9e ?<\/p>\n<p>PHP 8.2 <a href=\"https:\/\/wiki.php.net\/rfc\/mysqli_execute_query\">facilite l&rsquo;ex\u00e9cution des requ\u00eates MySQLi param\u00e9tr\u00e9es<\/a> avec la nouvelle fonction <code>mysqli_execute_query($sql, $params)<\/code> et la m\u00e9thode <code>mysqli::execute_query<\/code>.<\/p>\n<p>Essentiellement, cette nouvelle fonction est une combinaison des fonctions <code>mysqli_prepare()<\/code>, <code>mysqli_execute()<\/code>, et <code>mysqli_stmt_get_result()<\/code>. Avec elle, la requ\u00eate MySQLi sera pr\u00e9par\u00e9e, li\u00e9e (si vous passez des param\u00e8tres) et ex\u00e9cut\u00e9e au sein m\u00eame de la fonction. Si la requ\u00eate s&rsquo;ex\u00e9cute correctement, elle renvoie un objet <code>mysqli_result<\/code>. En cas d&rsquo;\u00e9chec, elle renverra <code>false<\/code>.<\/p>\n<p>La proposition RFC donne un exemple simple mais puissant :<\/p>\n<pre><code class=\"\"language-php\">foreach ($db-&gt;execute_query('SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)', [$name, $type1, $type2]) as $row) {\nprint_r($row);\n}<\/code><\/pre>\n<h3>R\u00e9cup\u00e9rer les propri\u00e9t\u00e9s de <code>enum<\/code> dans les expressions <code>const<\/code><\/h3>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/fetch_property_in_const_expressions\">Ce RFC propose<\/a>\u00a0d&rsquo;autoriser l&rsquo;op\u00e9rateur <code>-&gt;\/?-&gt;<\/code> \u00e0 r\u00e9cup\u00e9rer des <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8-1\/#enums\"><code>enum<\/code><\/a> propri\u00e9t\u00e9s dans les expressions <code>const<\/code>.<\/p>\n<p>La raison principale de cette nouvelle fonctionnalit\u00e9 est que vous ne pouvez pas utiliser les objets <code>enum<\/code> \u00e0 certains endroits, comme les cl\u00e9s de tableaux. Dans un tel cas, vous devrez r\u00e9p\u00e9ter la valeur de l&rsquo;affaire <code>enum<\/code> juste pour l&rsquo;utiliser.<\/p>\n<p>Permettre la r\u00e9cup\u00e9ration des propri\u00e9t\u00e9s <code>enum<\/code> dans des endroits o\u00f9 les objets <code>enum<\/code> ne sont pas autoris\u00e9s peut simplifier cette proc\u00e9dure.<\/p>\n<p>Cela signifie que le code suivant est d\u00e9sormais valable :<\/p>\n<pre><code class=\"language-php\">const C = [self::B-&gt;value =&gt; self::B];<\/code><\/pre>\n<p>Et juste pour \u00eatre s\u00fbr, ce RFC inclut \u00e9galement le support de l&rsquo;op\u00e9rateur nullsafe <code>?-&gt;<\/code>.<\/p>\n<h3>Autoriser les constantes dans les Traits<\/h3>\n<p>PHP inclut un moyen de r\u00e9utiliser le code appel\u00e9 Traits. Ils sont parfaits pour r\u00e9utiliser le code entre les classes.<\/p>\n<p>Actuellement, les Traits permettent seulement de d\u00e9finir des m\u00e9thodes et des propri\u00e9t\u00e9s, mais pas des constantes. Cela signifie que vous ne pouvez pas d\u00e9finir les invariants attendus par un Trait dans le Trait lui-m\u00eame. Pour contourner cette limitation, vous devez d\u00e9finir les constantes dans sa classe de composition ou dans une interface impl\u00e9ment\u00e9e par sa classe de composition.<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/constants_in_traits\">Ce RFC propose<\/a>\u00a0d&rsquo;autoriser la d\u00e9finition de constantes dans les Traits. Ces constantes peuvent \u00eatre d\u00e9finies comme vous le feriez pour des constantes de classe. Cet exemple tir\u00e9 directement du RFC clarifie les choses quant \u00e0 son utilisation :<\/p>\n<pre><code class=\"language-php\">trait Foo {\n    public const FLAG_1 = 1;\n    protected const FLAG_2 = 2;\n    private const FLAG_3 = 2;\n\n    public function doFoo(int $flags): void {\n        if ($flags & self::FLAG_1) {\n            echo 'Got flag 1';\n        }\n        if ($flags & self::FLAG_2) {\n            echo 'Got flag 2';\n        }\n        if ($flags & self::FLAG_3) {\n        echo 'Got flag 3';\n        }\n    }\n}<\/code><\/pre>\n<p>Les constantes de Trait sont \u00e9galement fusionn\u00e9es dans la d\u00e9finition de la classe qui les compose, de la m\u00eame mani\u00e8re que les d\u00e9finitions de propri\u00e9t\u00e9s et de m\u00e9thodes d&rsquo;un Trait. Elles ont \u00e9galement les m\u00eames restrictions que les propri\u00e9t\u00e9s des Traits. Comme indiqu\u00e9 dans la RFC, cette proposition &#8211; bien qu&rsquo;elle soit un bon d\u00e9but &#8211; n\u00e9cessite un travail suppl\u00e9mentaire pour \u00e9toffer cette fonctionnalit\u00e9.<\/p>\n<h2>D\u00e9pr\u00e9ciations dans PHP 8.2<\/h2>\n<p>Nous pouvons maintenant passer \u00e0 l&rsquo;exploration de toutes les d\u00e9pr\u00e9ciations de PHP 8.2. Cette liste n&rsquo;est pas aussi longue que celle des nouvelles fonctionnalit\u00e9s :<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"15\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>D\u00e9pr\u00e9ciation des propri\u00e9t\u00e9s dynamiques (et nouvel attribut <code>#[AllowDynamicProperties]<\/code> )<\/h3>\n<p>Jusqu&rsquo;\u00e0 PHP 8.1, vous pouviez <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-vs-javascript\/#typing-of-variables\">d\u00e9finir et r\u00e9cup\u00e9rer dynamiquement des propri\u00e9t\u00e9s de classe non d\u00e9clar\u00e9es<\/a> en PHP. Par exemple :<\/p>\n<pre><code class=\"language-php\">class Post {\n    private int $pid;\n}\n\n$post = new Post();\n$post-&gt;name = 'Kinsta';<code class=\"language-php\"><\/code><\/code><\/pre>\n<p>Ici, la classe <code>Post<\/code> ne d\u00e9clare pas une propri\u00e9t\u00e9 <code>name<\/code>. Mais parce que PHP autorise les propri\u00e9t\u00e9s dynamiques, vous pouvez la d\u00e9finir en dehors de la d\u00e9claration de la classe. C&rsquo;est son plus grand &#8211; et peut-\u00eatre, le seul &#8211; avantage.<\/p>\n<p>Les propri\u00e9t\u00e9s dynamiques permettent l&rsquo;apparition de bogues et de comportements inattendus dans votre code. Par exemple, si vous faites une erreur en d\u00e9clarant une propri\u00e9t\u00e9 de classe en dehors de la classe, il est facile d&rsquo;en perdre la trace &#8211; surtout lors du d\u00e9bogage d&rsquo;\u00e9ventuelles erreurs dans cette classe.<\/p>\n<p>\u00c0 partir de PHP 8.2, les <a href=\"https:\/\/wiki.php.net\/rfc\/deprecate_dynamic_properties\">propri\u00e9t\u00e9s dynamiques sont d\u00e9pr\u00e9ci\u00e9es<\/a>. D\u00e9finir une valeur \u00e0 une propri\u00e9t\u00e9 de classe non d\u00e9clar\u00e9e \u00e9mettra une notification de d\u00e9pr\u00e9ciation la premi\u00e8re fois que la propri\u00e9t\u00e9 sera d\u00e9finie.<\/p>\n<pre><code class=\"language-php\">class Foo {}\n$foo = new Foo;\n\n\/\/ Deprecated: Creation of dynamic property Foo::$bar is deprecated\n$foo-&gt;bar = 1;\n\n\/\/ No deprecation warning: Dynamic property already exists.\n$foo-&gt;bar = 2;<code class=\"language-php\"><\/code><\/code><\/pre>\n<p>Cependant, \u00e0 partir de PHP 9.0, la d\u00e9finition de la m\u00eame valeur entra\u00eenera une erreur <code>ErrorException<\/code>.<\/p>\n<p>Si votre code est rempli de propri\u00e9t\u00e9s dynamiques &#8211; et c&rsquo;est le cas de beaucoup de code PHP &#8211; et si vous voulez arr\u00eater ces avis de d\u00e9pr\u00e9ciation apr\u00e8s la mise \u00e0 jour vers PHP 8.2, vous pouvez utiliser le nouvel attribut <code>#[AllowDynamicProperties]<\/code> de PHP 8.2 pour autoriser les propri\u00e9t\u00e9s dynamiques sur les classes.<\/p>\n<pre><code class=\"language-php\">#[AllowDynamicProperties]\nclass Pets {}\nclass Cats extends Pets {}\n\n\/\/ You'll get no deprecation warning\n$obj = new Pets;\n$obj-&gt;test = 1;\n\n\/\/ You'll get no deprecation warning for child classes\n$obj = new Cats;\n$obj-&gt;test = 1;<\/code><\/pre>\n<p>Selon la RFC, les classes marqu\u00e9es comme <code>#[AllowDynamicProperties]<\/code>, ainsi que leurs classes filles, peuvent continuer \u00e0 utiliser les propri\u00e9t\u00e9s dynamiques sans d\u00e9pr\u00e9ciation ou suppression.<\/p>\n<p>Vous devez \u00e9galement noter que, en PHP 8.2, la seule classe marqu\u00e9e comme <code>#[AllowDynamicProperties]<\/code> est <code>stdClass<\/code>. De plus, toutes les propri\u00e9t\u00e9s acc\u00e9d\u00e9es par les <a href=\"https:\/\/www.php.net\/manual\/en\/language.oop5.magic.php\">m\u00e9thodes magiques PHP<\/a> <code>__get()<\/code> ou <code>__set()<\/code> ne sont pas consid\u00e9r\u00e9es comme des propri\u00e9t\u00e9s dynamiques, de sorte qu&rsquo;elles ne d\u00e9clencheront pas de notification de d\u00e9pr\u00e9ciation.<\/p>\n<h3>D\u00e9pr\u00e9ciation des appelants partiellement support\u00e9s<\/h3>\n<p>Un autre changement de PHP 8.2, bien qu&rsquo;avec un impact plus n\u00e9gligeable, est de <a href=\"https:\/\/wiki.php.net\/rfc\/deprecate_partially_supported_callables\">d\u00e9pr\u00e9cier les appelables partiellement support\u00e9s<\/a>.<\/p>\n<p>Ces appelables sont appel\u00e9s partiellement support\u00e9s parce que vous ne pouvez pas interagir avec eux directement via <code>$callable()<\/code>. Vous ne pouvez les atteindre qu&rsquo;avec la fonction <code>call_user_func($callable)<\/code>. La liste de ces appelables n&rsquo;est pas longue :<\/p>\n<pre><code class=\"language-php\">\"self::method\"\n\"parent::method\"\n\"static::method\"\n[\"self\", \"method\"]\n[\"parent\", \"method\"]\n[\"static\", \"method\"]\n[\"Foo\", \"Bar::method\"]\n[new Foo, \"Bar::method\"]<\/code><\/pre>\n<p>\u00c0 partir de PHP 8.2, toute tentative d&rsquo;invoquer de tels appelables &#8211; comme via les fonctions <code>call_user_func()<\/code> ou <code>array_map()<\/code> &#8211; entra\u00eenera un avertissement de d\u00e9pr\u00e9ciation.<\/p>\n<p>La RFC originale donne un raisonnement solide derri\u00e8re cette d\u00e9pr\u00e9ciation :<\/p>\n<blockquote><p><em>En dehors des deux derniers cas, tous ces appelables sont d\u00e9pendants du contexte. La m\u00e9thode \u00e0 laquelle <code>\"self::method\"<\/code> fait r\u00e9f\u00e9rence d\u00e9pend de la classe \u00e0 partir de laquelle l&rsquo;appel ou la v\u00e9rification de l&rsquo;appelabilit\u00e9 est effectu\u00e9. En pratique, cela vaut \u00e9galement pour les deux derniers cas, lorsqu&rsquo;ils sont utilis\u00e9s sous la forme de <code>[new Foo, \"parent::method\"]<\/code>.<\/em><\/p>\n<p><em>La r\u00e9duction de la d\u00e9pendance contextuelle des appelables est l&rsquo;objectif secondaire de ce RFC. Apr\u00e8s ce RFC, la seule d\u00e9pendance de port\u00e9e qui subsiste est la visibilit\u00e9 de la m\u00e9thode : <code>\"Foo::bar\"<\/code> peut \u00eatre visible dans une port\u00e9e, mais pas dans une autre. Si les appelables devaient \u00eatre limit\u00e9s aux m\u00e9thodes publiques \u00e0 l&rsquo;avenir (tandis que les m\u00e9thodes priv\u00e9es devraient utiliser des appelables de premi\u00e8re classe ou <code>Closure::fromCallable()<\/code> pour \u00eatre rendues ind\u00e9pendantes de la port\u00e9e), alors le type d&rsquo;appelable deviendrait bien d\u00e9fini et pourrait \u00eatre utilis\u00e9 comme un type de propri\u00e9t\u00e9.<\/em><em>Cependant, les modifications de la gestion de la visibilit\u00e9 ne sont pas propos\u00e9es dans le cadre de ce RFC<\/em><\/p><\/blockquote>\n<p>.<br \/>\nConform\u00e9ment au RFC d&rsquo;origine, la fonction <code>is_callable()<\/code> et le type <code>callable<\/code> continueront \u00e0 accepter ces appellables en tant qu&rsquo;exceptions. Mais seulement jusqu&rsquo;\u00e0 ce que leur support soit enti\u00e8rement supprim\u00e9 \u00e0 partir de PHP 9.0.<\/p>\n<p>Pour \u00e9viter toute confusion, le champ d&rsquo;application de cette notice de d\u00e9pr\u00e9ciation a \u00e9t\u00e9 <a href=\"https:\/\/wiki.php.net\/rfc\/partially-supported-callables-expand-deprecation-notices\">\u00e9tendu avec un nouveau RFC<\/a> &#8211; il inclut maintenant ces exceptions.<\/p>\n<p>C&rsquo;est une bonne chose de voir PHP \u00e9voluer vers un type <code>callable<\/code> bien d\u00e9fini.<\/p>\n<h3>D\u00e9pr\u00e9ciation des fonctions <code>#utf8_encode()<\/code> et <code>utf8_decode()<\/code><\/h3>\n<p>Les fonctions int\u00e9gr\u00e9es de PHP <code>utf8_encode()<\/code> et <code>utf8_decode()<\/code> convertissent les cha\u00eenes encod\u00e9es en ISO-8859-1 (\u00ab Latin 1 \u00bb) en UTF-8 et vice-versa.<\/p>\n<p>Cependant, leurs noms sugg\u00e8rent une utilisation plus g\u00e9n\u00e9rale que leur impl\u00e9mentation ne le permet. L&rsquo;encodage \u00ab Latin 1 \u00bb est souvent confondu avec d&rsquo;autres encodages tels que le \u00ab Windows Code Page 1252 \u00bb<\/p>\n<p>En outre, vous verrez g\u00e9n\u00e9ralement <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mojibake\">Mojibake<\/a> lorsque ces fonctions ne peuvent pas convertir correctement une cha\u00eene de caract\u00e8res. L&rsquo;absence de messages d&rsquo;erreur signifie \u00e9galement qu&rsquo;il est difficile de les rep\u00e9rer, surtout au milieu d&rsquo;une mer de texte autrement lisible.<\/p>\n<p>PHP 8.2 <a href=\"https:\/\/wiki.php.net\/rfc\/remove_utf8_decode_and_utf8_encode\">d\u00e9pr\u00e9cie les fonctions <code>#utf8_encode()<\/code> et <code>utf8_decode()<\/code> <\/a>. Si vous les invoquez, vous verrez ces avis de d\u00e9pr\u00e9ciation :<\/p>\n<pre><code class=\"language-php\">Deprecated: Function utf8_encode() is deprecated\nDeprecated: Function utf8_decode() is deprecated<\/code><\/pre>\n<p>La RFC sugg\u00e8re d&rsquo;utiliser <a href=\"https:\/\/kinsta.com\/fr\/blog\/installer-php\/#all-about-php-extensions\">les extensions support\u00e9es par PHP<\/a> comme <code>mbstring<\/code>, <code>iconv<\/code>, et <code>intl<\/code> \u00e0 la place.<\/p>\n<h3>D\u00e9pr\u00e9ciation de <code>${}<\/code> Interpolation de cha\u00eenes de caract\u00e8res<\/h3>\n<p>PHP permet d&rsquo;int\u00e9grer des variables dans des cha\u00eenes de caract\u00e8res avec des guillemets doubles (<code>\"<\/code>) et heredoc (<code>&lt;&lt;&lt;<\/code>) de plusieurs fa\u00e7ons :<\/p>\n<ol>\n<li>Variables directement incorpor\u00e9es &#8211; <code>\u201c$foo\u201d<\/code><\/li>\n<li>Avec des accolades \u00e0 l&rsquo;ext\u00e9rieur de la variable &#8211; <code>\u201c{$foo}\u201d<\/code><\/li>\n<li>Avec des accolades apr\u00e8s le signe dollar &#8211; <code>\u201c${foo}\u201d<\/code><\/li>\n<li>Variables variables &#8211; <code>\u201c${expr}\u201d<\/code> &#8211; \u00e9quivalent \u00e0 l&rsquo;utilisation de <code>(string) ${expr}<\/code><\/li>\n<\/ol>\n<p>Les deux premi\u00e8res fa\u00e7ons ont leurs avantages et leurs inconv\u00e9nients, tandis que les deux derni\u00e8res ont une syntaxe complexe et conflictuelle. PHP 8.2 <a href=\"https:\/\/wiki.php.net\/rfc\/deprecate_dollar_brace_string_interpolation\">d\u00e9pr\u00e9cie les deux derni\u00e8res m\u00e9thodes d&rsquo;interpolation de cha\u00eenes de caract\u00e8res<\/a>.<\/p>\n<p>Vous devriez \u00e9viter d&rsquo;interpoler des cha\u00eenes de cette fa\u00e7on \u00e0 l&rsquo;avenir :<\/p>\n<pre><code class=\"language-php\">\"Hello, ${world}!\";\nDeprecated: Using ${} in strings is deprecated\n\n\"Hello, ${(world)}!\";\nDeprecated: Using ${} (variable variables) in strings is deprecated<\/code><\/pre>\n<p>\u00c0 partir de PHP 9.0, ces d\u00e9pr\u00e9ciations seront mises \u00e0 jour pour lancer une exception d&rsquo;erreur.<\/p>\n<h3>D\u00e9pr\u00e9ciation des fonctions mbstring pour les entit\u00e9s Base64\/QPrint\/Uuencode\/HTML<\/h3>\n<p>Les fonctions mbstring (cha\u00eene de caract\u00e8res multi-octets) de PHP nous aident \u00e0 travailler avec l&rsquo;Unicode, les entit\u00e9s HTML, et d&rsquo;autres encodages de texte anciens.<\/p>\n<p>Cependant, Base64, Uuencode, et QPrint ne sont pas des encodages de texte et font toujours partie de ces fonctions &#8211; principalement pour des raisons d&rsquo;h\u00e9ritage. PHP inclut \u00e9galement des impl\u00e9mentations s\u00e9par\u00e9es de ces encodages.<\/p>\n<p>Quant aux entit\u00e9s HTML, PHP a des fonctions int\u00e9gr\u00e9es &#8211; <code>htmlspecialchars()<\/code> et <code>htmlentities()<\/code> &#8211; pour mieux les g\u00e9rer. Par exemple, contrairement \u00e0 mbstring, ces fonctions convertiront \u00e9galement <code>&lt;<\/code>. <code>&gt;<\/code> et <code>&<\/code> en entit\u00e9s HTML.<\/p>\n<p>De plus, PHP am\u00e9liore constamment ses fonctions int\u00e9gr\u00e9es &#8211; <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8-1\/#html-encoding-and-decoding-functions-now-use-ent_quotes--ent_substitute\">comme PHP 8.1 avec les fonctions d&rsquo;encodage et de d\u00e9codage HTML<\/a>.<\/p>\n<p>Donc, en gardant tout cela \u00e0 l&rsquo;esprit, PHP 8.2 <a href=\"https:\/\/github.com\/php\/php-src\/commit\/9308974f8cc6c1046f228be5320fe067913ba987\">d\u00e9pr\u00e9cie l&rsquo;utilisation de mbstring pour ces encodages<\/a> (les libell\u00e9s sont insensibles \u00e0 la casse) :<\/p>\n<ul>\n<li>BASE64<\/li>\n<li>UUENCODE<\/li>\n<li>HTML-ENTITIES<\/li>\n<li>html (alias de HTML-ENTITIES)<\/li>\n<li>Quoted-Printable<\/li>\n<li>qprint (alias de Quoted-Printable)<\/li>\n<\/ul>\n<p>A partir de PHP 8.2, l&rsquo;utilisation de mbstring pour encoder\/d\u00e9coder l&rsquo;un des \u00e9l\u00e9ments ci-dessus \u00e9mettra une notification de d\u00e9pr\u00e9ciation. PHP 9.0 supprimera compl\u00e8tement le support de mbstring pour ces encodages.<\/p>\n<h2>Autres changements mineurs dans PHP 8.2<\/h2>\n<p>Enfin, nous pouvons aborder les changements mineurs de PHP 8.2, y compris les caract\u00e9ristiques et fonctionnalit\u00e9s supprim\u00e9es.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"15\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Suppression du support de libmysql de mysqli<\/h3>\n<p>A partir de maintenant, PHP permet aux pilotes <code>mysqli<\/code> et <code>PDO_mysql<\/code> de construire contre les biblioth\u00e8ques <code>mysqlnd<\/code> et <code>libmysql<\/code>. Cependant, le pilote par d\u00e9faut et recommand\u00e9 depuis PHP 5.4 est <code>mysqlnd<\/code>.<\/p>\n<p>Ces deux pilotes ont de nombreux avantages et inconv\u00e9nients. Cependant, supprimer le support de l&rsquo;un d&rsquo;entre eux &#8211; id\u00e9alement, <a href=\"https:\/\/wiki.php.net\/rfc\/mysqli_support_for_libmysql\">supprimer <code>libmysql<\/code><\/a> car il n&rsquo;est pas le pilote par d\u00e9faut &#8211; simplifiera le code et les tests unitaires de PHP.<\/p>\n<p>Pour argumenter en faveur de cette faveur, le RFC liste de nombreux avantages de <code>mysqlnd<\/code>:<\/p>\n<ul>\n<li>Il est fourni avec PHP<\/li>\n<li>Il utilise la gestion de la m\u00e9moire de PHP pour surveiller l&rsquo;utilisation de la m\u00e9moire et<br \/>\n<a href=\"https:\/\/kinsta.com\/fr\/blog\/methodes-optimisation-performances-laravel\/\">am\u00e9liorer les performances<\/a><\/li>\n<li>Fournit des fonctions de qualit\u00e9 de vie (par exemple, <code>get_result()<\/code>)<\/li>\n<li>Renvoie des valeurs num\u00e9riques en utilisant les types natifs de PHP<\/li>\n<li>Ses fonctionnalit\u00e9s ne d\u00e9pendent pas de la biblioth\u00e8que externe<\/li>\n<li>Fonctionnalit\u00e9 d&rsquo;extension optionnelle<\/li>\n<li>Supporte les requ\u00eates asynchrones<\/li>\n<\/ul>\n<p>La RFC liste \u00e9galement quelques avantages de <code>libmysql<\/code>, dont :<\/p>\n<ul>\n<li>La reconnexion automatique est possible ( <code>mysqlnd<\/code> ne supporte pas cette fonctionnalit\u00e9 intentionnellement car elle peut \u00eatre facilement exploit\u00e9e)<\/li>\n<li>Modes d&rsquo;authentification LDAP et SASL (<code>mysqlnd<\/code> <a href=\"https:\/\/github.com\/php\/php-src\/pull\/6447\">pourrait ajouter cette fonctionnalit\u00e9<\/a> prochainement aussi)<\/li>\n<\/ul>\n<p>En outre, le RFC \u00e9num\u00e8re de nombreux inconv\u00e9nients de <code>libmysql<\/code> &#8211; incompatibilit\u00e9 avec le mod\u00e8le de m\u00e9moire de PHP, nombreux tests \u00e9chou\u00e9s, fuites de m\u00e9moire, diff\u00e9rences de fonctionnalit\u00e9s entre les versions, etc.<\/p>\n<p>En gardant tout cela \u00e0 l&rsquo;esprit, PHP 8.2 a supprim\u00e9 le support de la construction de <code>mysqli<\/code> contre <code>libmysql<\/code>.<\/p>\n<p>Si vous voulez ajouter une fonctionnalit\u00e9 qui n&rsquo;est disponible qu&rsquo;avec <code>libmysql<\/code>, vous devrez l&rsquo;ajouter explicitement \u00e0<code> mysqlnd<\/code> en tant que demande de fonctionnalit\u00e9. De m\u00eame, vous ne pouvez pas ajouter l&rsquo;auto-reconnexion.<\/p>\n<h3>Conversion des cas ind\u00e9pendants de la localisation<\/h3>\n<p>Avant <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8\/\">PHP 8.0<\/a>, la locale de PHP \u00e9tait h\u00e9rit\u00e9e de l&rsquo;environnement syst\u00e8me. Mais cela pouvait causer un probl\u00e8me dans certains cas limites.<\/p>\n<p>Le fait de d\u00e9finir votre langue lors de l&rsquo;installation de Linux va d\u00e9finir la langue appropri\u00e9e de l&rsquo;interface utilisateur pour <a href=\"https:\/\/kinsta.com\/fr\/blog\/commandes-linux\/\">ses commandes int\u00e9gr\u00e9es<\/a>. Cependant, cela modifie aussi de mani\u00e8re inattendue le fonctionnement de la fonctionnalit\u00e9 de traitement des cha\u00eenes de caract\u00e8res de la biblioth\u00e8que C.<\/p>\n<p>Par exemple, si vous avez s\u00e9lectionn\u00e9 la langue \u00ab turque \u00bb ou \u00ab kazakhe \u00bb lors de l&rsquo;installation de Linux, vous constaterez que l&rsquo;appel de <code>toupper('i')<\/code> pour obtenir son \u00e9quivalent en majuscules obtiendra le <a href=\"https:\/\/www.wikiwand.com\/en\/%C4%B0\">I majuscule point\u00e9<\/a> (U+0130, <code>\u0130<\/code>).<\/p>\n<p>PHP 8.0 a mis fin \u00e0 cette anomalie en fixant la locale par d\u00e9faut \u00e0 \u00ab C \u00bb, sauf si l&rsquo;utilisateur la modifie explicitement via <code>setlocale()<\/code>.<\/p>\n<p>PHP 8.2 va encore plus loin en <a href=\"https:\/\/wiki.php.net\/rfc\/strtolower-ascii\">supprimant la sensibilit\u00e9 locale des conversions de casse<\/a>. Cette RFC modifie principalement <code>strtolower()<\/code>, <code>strtoupper()<\/code>, et les fonctions associ\u00e9es. Lisez la RFC pour obtenir la liste de toutes les fonctions concern\u00e9es.<\/p>\n<p>Comme alternative, si vous voulez utiliser la conversion de casse localis\u00e9e, vous pouvez utiliser <code>mb_strtolower()<\/code>.<\/p>\n<h3>Am\u00e9lioration de l&rsquo;extension al\u00e9atoire<\/h3>\n<p>PHP pr\u00e9voit de <a href=\"https:\/\/wiki.php.net\/rfc\/rng_extension\">remanier sa fonctionnalit\u00e9 al\u00e9atoire<\/a>.<\/p>\n<p>Actuellement, la fonctionnalit\u00e9 al\u00e9atoire de PHP repose sur l&rsquo;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Mersenne_Twister\">\u00e9tat de Mersenne Twister<\/a>. Cependant, cet \u00e9tat est implicitement stock\u00e9 dans la zone globale de PHP &#8211; il n&rsquo;y a aucun moyen pour un utilisateur d&rsquo;y acc\u00e9der. L&rsquo;ajout de fonctions al\u00e9atoires entre l&rsquo;\u00e9tape initiale d&rsquo;ensemencement et l&rsquo;utilisation pr\u00e9vue briserait le code.<\/p>\n<p>La maintenance d&rsquo;un tel code peut \u00eatre encore plus compliqu\u00e9e lorsque votre code utilise des paquets externes.<\/p>\n<p>Ainsi, la fonctionnalit\u00e9 al\u00e9atoire actuelle de PHP ne peut pas reproduire des valeurs al\u00e9atoires de mani\u00e8re coh\u00e9rente. Elle \u00e9choue m\u00eame aux tests statistiques empiriques des g\u00e9n\u00e9rateurs de nombres al\u00e9atoires uniformes, comme <a href=\"http:\/\/simul.iro.umontreal.ca\/testu01\/tu01.html\">Crush et BigCrush de TestU01<\/a>. La limitation \u00e0 32 bits de Mersenne Twister aggrave encore la situation.<\/p>\n<p>Ainsi, l&rsquo;utilisation des fonctions int\u00e9gr\u00e9es de PHP &#8211; <code>shuffle()<\/code>, <code>str_shuffle()<\/code>, <code>array_rand()<\/code> &#8211; n&rsquo;est pas recommand\u00e9e si vous avez besoin de nombres al\u00e9atoires crypto-graphiquement s\u00e9curis\u00e9s. Dans ce cas, vous devrez impl\u00e9menter une nouvelle fonction en utilisant <code>random_int()<\/code> ou des fonctions similaires.<\/p>\n<p>Cependant, <a href=\"https:\/\/wiki.php.net\/rfc\/random_extension_improvement\">plusieurs probl\u00e8mes avec cette RFC<\/a> ont \u00e9t\u00e9 soulev\u00e9s apr\u00e8s que le vote ait commenc\u00e9. Ce contretemps a oblig\u00e9 l&rsquo;\u00e9quipe PHP \u00e0 noter tous les probl\u00e8mes dans une RFC s\u00e9par\u00e9e, avec une option de vote cr\u00e9\u00e9e pour chaque probl\u00e8me. Ils d\u00e9cideront d&rsquo;aller plus loin seulement apr\u00e8s avoir atteint un consensus.<\/p>\n<h2>RFC suppl\u00e9mentaires dans PHP 8.2<\/h2>\n<p>PHP 8.2 inclut \u00e9galement de nombreuses nouvelles fonctions et des changements mineurs. Nous les mentionnons ci-dessous avec des liens vers des ressources suppl\u00e9mentaires :<\/p>\n<ol>\n<li><a href=\"https:\/\/github.com\/php\/php-src\/pull\/8720\">Nouvelle fonction <code>curl_upkeep<\/code><\/a> : PHP 8.2 ajoute cette nouvelle fonction \u00e0 son extension Curl. Elle appelle la fonction <code>curl_easy_upkeep()<\/code> dans libcurl, la biblioth\u00e8que C sous-jacente que l&rsquo;extension Curl de PHP utilise.<\/li>\n<li><a href=\"https:\/\/php.watch\/versions\/8.2\/ini_parse_quantity\">Nouvelle fonction <code>ini_parse_quantity<\/code><\/a> : Les directives PHP INI acceptent les tailles de donn\u00e9es avec un suffixe multiplicateur. Par exemple, vous pouvez \u00e9crire 25 m\u00e9gaoctets comme <code>25M<\/code>, ou 42 gigaoctets comme <code>42G<\/code>. Ces suffixes sont courants dans les fichiers PHP INI mais sont rares ailleurs. Cette nouvelle fonction analyse les <a href=\"https:\/\/kinsta.com\/fr\/blog\/augmenter-taille-max-upload-wordpress\/#create-or-modify-the-phpini-file\">valeurs PHP INI<\/a> et renvoie leur taille en octets.<\/li>\n<li><a href=\"https:\/\/github.com\/php\/php-src\/pull\/8151\/files\">Nouvelle fonction <code>memory_reset_peak_usage<\/code><\/a> : Cette fonction r\u00e9initialise l&rsquo;utilisation maximale de la m\u00e9moire retourn\u00e9e par la fonction <code>memory_get_peak_usage<\/code>. Elle peut \u00eatre pratique lorsque vous ex\u00e9cutez la m\u00eame action plusieurs fois et que vous souhaitez enregistrer l&rsquo;utilisation maximale de la m\u00e9moire pour chaque ex\u00e9cution.<\/li>\n<li><a href=\"https:\/\/github.com\/php\/php-src\/pull\/7583\">Prise en charge du modificateur de non-capture (<code>\/n<\/code>) dans les fonctions <code>preg_*<\/code><\/a> : En regex, les m\u00e9tacaract\u00e8res <code>()<\/code> indiquent un groupe de capture. Cela signifie que toutes les correspondances de l&rsquo;expression entre les crochets sont retourn\u00e9es. PHP 8.2 ajoute un modificateur de non capture (<code>\/n<\/code>) pour arr\u00eater ce comportement.<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/iterator_xyz_accept_array\">Faites en sorte que la famille <code>iterator_*()<\/code> accepte tous les it\u00e9rables<\/a>: Pour l&rsquo;instant, la famille <code>iterator_*()<\/code> de PHP n&rsquo;accepte que <code>\\Traversables<\/code> (c&rsquo;est-\u00e0-dire qu&rsquo;aucun tableau n&rsquo;est autoris\u00e9). C&rsquo;est inutilement restrictif, et ce RFC corrige cela.<\/li>\n<\/ol>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>PHP 8.2 s&rsquo;appuie sur les am\u00e9liorations massives de PHP 8.0 et PHP 8.1, ce qui n&rsquo;est pas une mince affaire. Nous pensons que les fonctionnalit\u00e9s les plus int\u00e9ressantes de PHP 8.2 sont ses nouveaux types autonomes, ses propri\u00e9t\u00e9s en lecture seule, et ses nombreuses am\u00e9liorations de performances.<\/p>\n<p>Nous sommes impatients d&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/comparaison-php\/\">\u00e9valuer PHP<\/a> 8.2 avec diff\u00e9rents <a href=\"https:\/\/kinsta.com\/fr\/blog\/frameworks-php\/\">frameworks PHP<\/a> et <a href=\"https:\/\/kinsta.com\/fr\/part-de-marche-de-wordpress\/\">CMS<\/a>.<\/p>\n<p>N&rsquo;oubliez pas d&rsquo;ajouter cet article de blog \u00e0 vos favoris pour vous y r\u00e9f\u00e9rer ult\u00e9rieurement.<\/p>\n<p><em>Quelles sont les fonctionnalit\u00e9s de PHP 8.2 que vous pr\u00e9f\u00e9rez ? Quelles sont les d\u00e9pr\u00e9ciations que vous pr\u00e9f\u00e9rez le moins ? Partagez vos r\u00e9flexions avec notre communaut\u00e9 dans les commentaires !<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP 8.2 s&rsquo;appuie sur les nouvelles bases \u00e9tablies par PHP 8.0 et PHP 8.1.\u00a0Maintenant que PHP 8.2 est sorti, nous allons couvrir les nouveaut\u00e9s de PHP &#8230;<\/p>\n","protected":false},"author":117,"featured_media":60522,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1000],"class_list":["post-60521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-mises-a-jour-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Quoi de neuf en PHP 8.2 - Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations et modifications<\/title>\n<meta name=\"description\" content=\"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quoi de neuf dans PHP 8.2 - Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations, changements et autres\" \/>\n<meta property=\"og:description\" content=\"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-11T12:23:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T11:34:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Quoi de neuf dans PHP 8.2 &#8211; Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations, changements et autres\",\"datePublished\":\"2022-08-11T12:23:05+00:00\",\"dateModified\":\"2023-08-22T11:34:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/\"},\"wordCount\":4150,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/\",\"name\":\"Quoi de neuf en PHP 8.2 - Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations et modifications\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png\",\"datePublished\":\"2022-08-11T12:23:05+00:00\",\"dateModified\":\"2023-08-22T11:34:13+00:00\",\"description\":\"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mises \u00e0 jour PHP\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/mises-a-jour-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Quoi de neuf dans PHP 8.2 &#8211; Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations, changements et autres\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Quoi de neuf en PHP 8.2 - Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations et modifications","description":"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/","og_locale":"fr_FR","og_type":"article","og_title":"Quoi de neuf dans PHP 8.2 - Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations, changements et autres","og_description":"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.","og_url":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2022-08-11T12:23:05+00:00","article_modified_time":"2023-08-22T11:34:13+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Salman Ravoof","Dur\u00e9e de lecture estim\u00e9e":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Quoi de neuf dans PHP 8.2 &#8211; Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations, changements et autres","datePublished":"2022-08-11T12:23:05+00:00","dateModified":"2023-08-22T11:34:13+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/"},"wordCount":4150,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/","url":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/","name":"Quoi de neuf en PHP 8.2 - Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations et modifications","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png","datePublished":"2022-08-11T12:23:05+00:00","dateModified":"2023-08-22T11:34:13+00:00","description":"PHP 8.2. est sorti. D\u00e9couvrez toutes les nouvelles fonctionnalit\u00e9s, les am\u00e9liorations, les d\u00e9pr\u00e9ciations et les changements mineurs qui accompagnent cette version.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/php-8-2\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/whats-new-in-php-82.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/php-8-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Mises \u00e0 jour PHP","item":"https:\/\/kinsta.com\/fr\/sujets\/mises-a-jour-php\/"},{"@type":"ListItem","position":3,"name":"Quoi de neuf dans PHP 8.2 &#8211; Nouvelles fonctionnalit\u00e9s, d\u00e9pr\u00e9ciations, changements et autres"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/60521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=60521"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/60521\/revisions"}],"predecessor-version":[{"id":64433,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/60521\/revisions\/64433"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/it"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/es"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/nl"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/dk"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/translations\/se"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60521\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/60522"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=60521"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=60521"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=60521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}