<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration84.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'migration84.new-features.php',
    1 => 'Nouvelles fonctionnalit&eacute;s',
    2 => 'Nouvelles fonctionnalit&eacute;s',
  ),
  'up' => 
  array (
    0 => 'migration84.php',
    1 => 'Migration de PHP 8.3.x vers PHP 8.4.x',
  ),
  'prev' => 
  array (
    0 => 'migration84.php',
    1 => 'Migration de PHP 8.3.x vers PHP 8.4.x',
  ),
  'next' => 
  array (
    0 => 'migration84.new-classes.php',
    1 => 'Nouvelles classes, &eacute;num&eacute;rations et interfaces',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'appendices/migration84/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration84.new-features" class="sect1">
 <h2 class="title">Nouvelles fonctionnalités</h2>

 
 <div class="sect2" id="migration84.new-features.core">
  <h3 class="title">PHP Core</h3>

  
  <div class="sect3" id="migration84.new-features.core.property-hooks">
   <h4 class="title">Propriété avec hooks</h4>

   <p class="simpara">
    Les propriétés d&#039;objet peuvent désormais avoir une logique supplémentaire
    associée à leurs opérations <code class="literal">get</code> et <code class="literal">set</code>.
    Selon l&#039;utilisation, cela peut rendre la propriété virtuelle ou non,
    c&#039;est-à-dire qu&#039;elle n&#039;a aucune valeur de stockage sous-jacente.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Person<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Une propriété "virtuelle". Elle ne peut pas être définie explicitement.<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $fullName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">get </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName </span><span style="color: #007700">. </span><span style="color: #DD0000">' ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName</span><span style="color: #007700">;<br />    }<br /><br />    </span><span style="color: #FF8000">// Toutes les opérations d'écriture passent par ce hook, et le résultat est ce qui est écrit.<br />    // L'accès en lecture se fait normalement.<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $firstName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">set </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">ucfirst</span><span style="color: #007700">(</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">));<br />    }<br /><br />    </span><span style="color: #FF8000">// Toutes les opérations d'écriture passent par ce hook, qui doit écrire dans la valeur de stockage lui-même.<br />    // L'accès en lecture se fait normalement.<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $lastName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">set </span><span style="color: #007700">{<br />            if (</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">) &lt; </span><span style="color: #0000BB">2</span><span style="color: #007700">) {<br />                throw new </span><span style="color: #0000BB">\InvalidArgumentException</span><span style="color: #007700">(</span><span style="color: #DD0000">'Too short'</span><span style="color: #007700">);<br />            }<br />            </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName </span><span style="color: #007700">= </span><span style="color: #0000BB">$value</span><span style="color: #007700">;<br />        }<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">Person</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName </span><span style="color: #007700">= </span><span style="color: #DD0000">'peter'</span><span style="color: #007700">;<br />print </span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName</span><span style="color: #007700">; </span><span style="color: #FF8000">// Affiche "Peter"<br /></span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName </span><span style="color: #007700">= </span><span style="color: #DD0000">'Peterson'</span><span style="color: #007700">;<br />print </span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fullName</span><span style="color: #007700">; </span><span style="color: #FF8000">// Affiche "Peter Peterson"</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.asymmetric-property-visibility">
   <h4 class="title">Visibilité asymétrique des propriétés</h4>

   <p class="simpara">
    Les propriétés d&#039;objet peuvent désormais avoir leur visibilité
    <code class="literal">set</code> contrôlée séparément de la visibilité <code class="literal">get</code>.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Example<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Le premier modificateur de visibilité contrôle la visibilité de lecture,<br />    // et le second modificateur contrôle la visibilité d’écriture.<br />    // La visibilité de lecture ne doit pas être plus restreinte que la visibilité d’écriture.<br />    </span><span style="color: #007700">public protected(</span><span style="color: #0000BB">set</span><span style="color: #007700">) </span><span style="color: #0000BB">string $name</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">string $name</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br />    }<br />}</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.lazy-objects">
   <h4 class="title">Objets paresseux</h4>
   <p class="simpara">
    Il est désormais possible de créer des objets dont l&#039;initialisation est différée jusqu&#039;à
    leur accès. Les bibliothèques et frameworks peuvent tirer parti de ces objets paresseux
    pour différer la récupération de données ou de dépendances nécessaires à l&#039;initialisation.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Example<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(private </span><span style="color: #0000BB">int $data</span><span style="color: #007700">)<br />    {<br />    }<br /><br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">$initializer </span><span style="color: #007700">= static function (</span><span style="color: #0000BB">Example $fantôme</span><span style="color: #007700">): </span><span style="color: #0000BB">void </span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Récupérer les données ou dépendances<br />    </span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">getData</span><span style="color: #007700">();<br />    </span><span style="color: #FF8000">// Initialiser<br />    </span><span style="color: #0000BB">$fantôme</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);<br />};<br /><br /></span><span style="color: #0000BB">$reflector </span><span style="color: #007700">= new </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Example</span><span style="color: #007700">::class);<br /></span><span style="color: #0000BB">$object </span><span style="color: #007700">= </span><span style="color: #0000BB">$reflector</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">newLazyGhost</span><span style="color: #007700">(</span><span style="color: #0000BB">$initializer</span><span style="color: #007700">);</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.deprecated-attribute">
   <h4 class="title">L&#039;attribut <code class="code">#[\Deprecated]</code></h4>

   <p class="simpara">
    Le nouvel attribut <span class="classname"><a href="class.deprecated.php" class="classname">Deprecated</a></span> peut être utilisé pour marquer des fonctions, méthodes,
    et constantes de classe comme obsolètes. Le comportement de cette fonctionnalité obsolète utilisant cet
    attribut correspond à celui du mécanisme de dépréciation déjà existant pour les fonctionnalités fournies
    par PHP lui-même. La seule exception est que le code d&#039;erreur émis est
    <strong><code><a href="errorfunc.constants.php#constant.e-user-deprecated">E_USER_DEPRECATED</a></code></strong> au lieu de <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong>.
   </p>

   <p class="simpara">
    Les dépréciations existantes dans les fonctionnalités fournies par PHP lui-même ont été mises à jour pour utiliser
    cet attribut, améliorant les messages d&#039;erreur émis en incluant une brève explication.
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.rfc1867">
   <h4 class="title">Interprétation des requêtes RFC1867 (multipart) dans les requêtes HTTP non-POST</h4>

   
   <p class="simpara">
    Ajout de la fonction <span class="function"><a href="function.request-parse-body.php" class="function">request_parse_body()</a></span> qui permet d&#039;interpréter
    les requêtes RFC1867 (multipart) dans les requêtes HTTP non-POST.
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.new-chaining">
   <h4 class="title">Enchaînement d&#039;expressions <code class="literal"><a href="language.oop5.basic.php#language.oop5.basic.new" class="link"><code class="literal">new</code></a></code> sans parenthèses</h4>

   
   <p class="simpara">
    Nouvelles expressions avec des arguments de constructeur sont maintenant déréférençables, ce qui signifie
    qu&#039;elles permettent de chaîner les appels de méthode, les accès aux propriétés, etc. sans encadrer
    l&#039;expression entre parenthèses.
   </p>
  </div>

  <div class="sect3" id="migration84.new-features.core.debug-weakref">
   <h4 class="title">Informations de débogage améliorées pour <span class="classname"><a href="class.weakreference.php" class="classname">WeakReference</a></span></h4>

   
   <p class="simpara">
    Avoir les informations de débogage pour <span class="classname"><a href="class.weakreference.php" class="classname">WeakReference</a></span> affichera maintenant
    également l&#039;objet qu&#039;il référence, ou <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> si la référence n&#039;est
    plus valide.
   </p>
  </div>

  <div class="sect3" id="migration84.new-features.core.debug-closure">
   <h4 class="title">Informations de débogage améliorées pour <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span></h4>

   
   <p class="simpara">
    La sortie de <span class="methodname"><strong>Closure::__debugInfo()</strong></span> inclut maintenant
    le nom, le fichier et la ligne de la <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>.
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.multiple-namespaces-symbols">
   <h4 class="title">Définition de symboles identiques dans différents blocs d&#039;espace de noms</h4>

   
   <p class="simpara">
    Quitter un espace de noms efface désormais les symboles vus.
    Cela permet d&#039;utiliser un symbole dans un bloc d&#039;espace de noms, même si un bloc d&#039;espace de noms précédent
    a déclaré un symbole avec le même nom.
    
   </p>
  </div>

 </div>

 <div class="sect2" id="migration84.new-features.curl">
  <h3 class="title">cURL</h3>

  <p class="simpara">
   <span class="function"><a href="function.curl-version.php" class="function">curl_version()</a></span> renvoie une valeur
   <code class="literal">feature_list</code> supplémentaire, qui est un tableau associatif
   de toutes les fonctionnalités cURL connues, et si elles sont supportées (<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>)
   ou pas (<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>).
  </p>

  <p class="simpara">
   Ajout des constantes <strong><code><a href="curl.constants.php#constant.curl-http-version-3">CURL_HTTP_VERSION_3</a></code></strong> et
   <strong><code><a href="curl.constants.php#constant.curl-http-version-3only">CURL_HTTP_VERSION_3ONLY</a></code></strong> (disponibles
   depuis libcurl 7.66 et 7.88) comme options disponibles pour
   <strong><code><a href="curl.constants.php#constant.curlopt-http-version">CURLOPT_HTTP_VERSION</a></code></strong>.
  </p>

  <p class="simpara">
   Ajout de <strong><code><a href="curl.constants.php#constant.curlopt-prereqfunction">CURLOPT_PREREQFUNCTION</a></code></strong> comme option cURL qui
   accepte un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> à appeler après la connexion, mais avant
   l&#039;envoi de la requête.
   Ce callable doit retourner <strong><code><a href="curl.constants.php#constant.curl-prereqfunc-ok">CURL_PREREQFUNC_OK</a></code></strong> ou
   <strong><code><a href="curl.constants.php#constant.curl-prereqfunc-abort">CURL_PREREQFUNC_ABORT</a></code></strong> pour autoriser ou annuler la requête.
  </p>

  <p class="simpara">
   Ajout de <strong><code><a href="curl.constants.php#constant.curlopt-server-response-timeout">CURLOPT_SERVER_RESPONSE_TIMEOUT</a></code></strong>,
   qui était précédemment connu sous le nom de <strong><code><a href="curl.constants.php#constant.curlopt-ftp-response-timeout">CURLOPT_FTP_RESPONSE_TIMEOUT</a></code></strong>.
   Les deux constantes ont la même valeur.
  </p>

  <p class="para">
   Ajout de <strong><code><a href="curl.constants.php#constant.curlopt-debugfunction">CURLOPT_DEBUGFUNCTION</a></code></strong> comme option cURL qui
   accepte un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> qui est appelé pendant le cycle de vie de la requête
   avec l&#039;objet <span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span>,
   un entier contenant le type de message de débogage,
   et une chaîne contenant le message de débogage.
   Le type de message de débogage est l&#039;une des constantes suivantes :
   <ul class="simplelist">
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-text">CURLINFO_TEXT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-header-in">CURLINFO_HEADER_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-header-out">CURLINFO_HEADER_OUT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-data-in">CURLINFO_DATA_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-data-out">CURLINFO_DATA_OUT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-ssl-data-in">CURLINFO_SSL_DATA_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-ssl-data-out">CURLINFO_SSL_DATA_OUT</a></code></strong></li>
   </ul>
   Une fois que cette option est définie, <strong><code><a href="curl.constants.php#constant.curlinfo-header-out">CURLINFO_HEADER_OUT</a></code></strong>
   ne doit pas être défini car elle utilise la même fonctionnalité de libcurl.
  </p>

  <p class="simpara">
   <span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span> renvoie maintenant une clé
   <code class="literal">posttransfer_time_us</code>, contenant le nombre de microsecondes
   depuis le début jusqu&#039;à ce que le dernier octet soit envoyé.
   Lorsqu&#039;une redirection est suivie, le temps de chaque requête est ajouté ensemble.
   Cette valeur peut également être récupérée en passant
   <strong><code><a href="curl.constants.php#constant.curlinfo-posttransfer-time-t">CURLINFO_POSTTRANSFER_TIME_T</a></code></strong> au paramètre
   <code class="parameter">option</code> de <span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span>.
   Cela requiert libcurl 8.10.0 ou ultérieur.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.dom">
  <h3 class="title">DOM</h3>

   
  
  <p class="simpara">
   Ajout de l&#039;espace de noms <span class="package">Dom</span> avec de nouvelles classes en contrepartie
   des classes DOM existantes (par exemple, <span class="classname"><a href="class.dom-node.php" class="classname">Dom\Node</a></span> est le nouveau
   <span class="classname"><a href="class.domnode.php" class="classname">DOMNode</a></span>).
   Ces classes sont compatibles avec HTML 5 et respectent les spécifications WHATWG,
   résolvant ainsi des bugs de longue date dans l&#039;extension DOM.
   Les anciennes classes DOM restent disponibles pour assurer la compatibilité ascendante.
  </p>

  <p class="para">
   Ajout de <span class="methodname"><a href="domnode.comparedocumentposition.php" class="methodname">DOMNode::compareDocumentPosition()</a></span>
   avec ses constantes associées:
   <ul class="simplelist">
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-disconnected">DOMNode::DOCUMENT_POSITION_DISCONNECTED</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-preceding">DOMNode::DOCUMENT_POSITION_PRECEDING</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-following">DOMNode::DOCUMENT_POSITION_FOLLOWING</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-contains">DOMNode::DOCUMENT_POSITION_CONTAINS</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-contained-by">DOMNode::DOCUMENT_POSITION_CONTAINED_BY</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-implementation-specific">DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC</a></code></strong></li>
   </ul>
  </p>

  
  <p class="simpara">
   Il est maintenant possible de passer n&#039;importe quel callable à
   <span class="methodname"><a href="domxpath.registerphpfunctions.php" class="methodname">DOMXPath::registerPhpFunctions()</a></span>.
   De plus, avec <span class="methodname"><a href="domxpath.registerphpfunctionns.php" class="methodname">DOMXPath::registerPhpFunctionNs()</a></span>,
   des callbacks peuvent désormais être enregistrés pour utiliser la syntaxe d&#039;appel de fonction native
   au lieu d&#039;utiliser <code class="code">php:function(&#039;nom&#039;)</code>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.intl">
  <h3 class="title">Intl</h3>

  <p class="simpara">
   Ajout de <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-halfodd">NumberFormatter::ROUND_HALFODD</a></code></strong> pour
   compléter la fonctionnalité existante de <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-halfeven">NumberFormatter::ROUND_HALFEVEN</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.openssl">
  <h3 class="title">OpenSSL</h3>

  <p class="simpara">
   Ajout du support des clés basées sur Curve25519 + Curve448.
   Spécifiquement, les champs x25519, ed25519, x448 et ed448 sont supportés dans
   <span class="function"><a href="function.openssl-pkey-new.php" class="function">openssl_pkey_new()</a></span>,
   <span class="function"><a href="function.openssl-pkey-get-details.php" class="function">openssl_pkey_get_details()</a></span>,
   <span class="function"><a href="function.openssl-sign.php" class="function">openssl_sign()</a></span>, et
   <span class="function"><a href="function.openssl-verify.php" class="function">openssl_verify()</a></span> ont été étendus pour supporter ces clés.
  </p>

  <p class="simpara">
   Implémentation du hachage de mot de passe PASSWORD_ARGON2.
   Requiert OpenSSL 3.2 et une construction NTS.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pcre">
  <h3 class="title">PCRE</h3>

  <p class="simpara">
   La version de pcre2lib incluse a été mise à jour en version 10.44.
   Par conséquent, le support JIT LoongArch a été ajouté, les espaces
   sont maintenant autorisés entre les accolades dans les éléments compatibles avec Perl, et
   les assertions de lookbehind de longueur variable sont maintenant supportées.
  </p>

  <p class="simpara">
   Avec pcre2lib version 10.44, la longueur maximale des groupes de capture nommés
   a changé de <code class="literal">32</code> à <code class="literal">128</code>.
  </p>

  <p class="simpara">
   Ajout du support pour le modificateur <code class="literal">r</code> (PCRE2_EXTRA_CASELESS_RESTRICT),
   ainsi que du modificateur de mode <code class="literal">(?r)</code>.
   Lorsqu&#039;il est activé avec le modificateur insensible à la casse (<code class="literal">i</code>),
   l&#039;expression verrouille le mélange de caractères ASCII et non-ASCII.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo">
  <h3 class="title">PDO</h3>

  
  <p class="simpara">
   Ajout du support pour les sous-classes spécifiques aux pilotes afin de mieux supporter
   les fonctionnalités spécifiques à la base de données.
   Ces nouvelles classes peuvent être instanciées soit en appelant la méthode
   <span class="methodname"><a href="pdo.connect.php" class="methodname">PDO::connect()</a></span> ou en instanciant directement une instance
   des sous-classes spécifique au pilote.
  </p>

  
  <p class="para">
   Ajout du support pour les analyseurs SQL spécifiques aux pilotes.
   Lorsque un parseur spécifique au pilote n&#039;est pas disponible, le parseur par défaut est utilisé.
   L&#039;analyseur par défaut supporte:
   <ul class="simplelist">
    <li>
     les littéraux simples et doubles, avec le doublement comme mécanisme d'échappement
    </li>
    <li>
     les commentaires dans le style C non imbriqués et à deux tirets
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-mysql">
  <h3 class="title">PDO_MYSQL</h3>

  
  <p class="para">
   Ajout d&#039;un analyseur personnalisé prenant en charge :
   <ul class="simplelist">
    <li>
     les littéraux simples et doubles, avec le doublement et l'antislash comme mécanisme d'échappement
    </li>
    <li>
     les identifiants littéraux avec un accent grave et le doublement comme mécanisme d'échappement
    </li>
    <li>
     deux tirets suivis d'au moins 1 espace, les commentaires C-style non imbriqués,
     et les commentaires de type hash
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-pgsql">
  <h3 class="title">PDO_PGSQL</h3>

  
  <p class="para">
   Ajout d&#039;un analyseur personnalisé prenant en charge :
   <ul class="simplelist">
    <li>
     les littéraux simples et doubles, avec le doublement comme mécanisme d'échappement
    </li>
    <li>
     l'"échappement" des littéraux de chaîne de style C (<code class="literal">E&#039;string&#039;</code>)
    </li>
    <li>
     les littéraux de chaîne de style cité en dollars
    </li>
    <li>
     deux tirets et les commentaires de style C (non imbriqués)
    </li>
    <li>
     le support de <code class="literal">??</code> comme séquence d'échappement pour
     l'opérateur <code class="literal">?</code>
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-sqlite">
  <h3 class="title">PDO_SQLITE</h3>

  
  <p class="para">
   Ajout d&#039;un analyseur personnalisé prenant en charge :
   <ul class="simplelist">
    <li>
     les littéraux simples, doubles et accent grave, avec le doublement comme
     mécanisme d'échappement
    </li>
    <li>
     les crochets citant les identifiants
    </li>
    <li>
     deux tirets et le C-style commentaires (non imbriqués)
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.phar">
  <h3 class="title">Phar</h3>

  <p class="simpara">
   Ajout du support de l&#039;extension de timestamp Unix pour les archives Zip.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.readline">
  <h3 class="title">Readline</h3>

  <p class="simpara">
   Ajout de la possibilité de changer le chemin de <code class="literal">.php_history</code> via
   la variable d&#039;environnement <var class="envar">PHP_HISTFILE</var>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.reflection">
  <h3 class="title">Reflection</h3>

  <p class="simpara">
   <span class="classname"><a href="class.reflectionattribute.php" class="classname">ReflectionAttribute</a></span> contient désormais une
   propriété <span class="property">name</span> pour améliorer l&#039;expérience de débogage.
  </p>

  <p class="simpara">
   <span class="methodname"><a href="reflectionclassconstant.tostring.php" class="methodname">ReflectionClassConstant::__toString()</a></span> et
   <span class="methodname"><a href="reflectionproperty.tostring.php" class="methodname">ReflectionProperty::__toString()</a></span> renvoie désormais
   les commentaires de documentation attachés.
  </p>

  
  <p class="para">
   De multiples nouvelles méthodes et constantes liées à la fonctionnalité des objets paresseux
   ont été ajoutées :

   <ul class="simplelist">
    <li>
     <span class="methodname"><a href="reflectionclass.newlazyghost.php" class="methodname">ReflectionClass::newLazyGhost()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.newlazyproxy.php" class="methodname">ReflectionClass::newLazyProxy()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.resetaslazyghost.php" class="methodname">ReflectionClass::resetAsLazyGhost()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.resetaslazyproxy.php" class="methodname">ReflectionClass::resetAsLazyProxy()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.isuninitializedlazyobject.php" class="methodname">ReflectionClass::isUninitializedLazyObject()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.initializelazyobject.php" class="methodname">ReflectionClass::initializeLazyObject()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.marklazyobjectasinitialized.php" class="methodname">ReflectionClass::markLazyObjectAsInitialized()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.getlazyinitializer.php" class="methodname">ReflectionClass::getLazyInitializer()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionproperty.skiplazyinitialization.php" class="methodname">ReflectionProperty::skipLazyInitialization()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionproperty.setrawvaluewithoutlazyinitialization.php" class="methodname">ReflectionProperty::setRawValueWithoutLazyInitialization()</a></span>
    </li>
    <li>
     <strong><code><a href="class.reflectionclass.php#reflectionclass.constants.skip-initialization-on-serialize">ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE</a></code></strong>
    </li>
    <li>
     <strong><code><a href="class.reflectionclass.php#reflectionclass.constants.skip-destructor">ReflectionClass::SKIP_DESTRUCTOR</a></code></strong>
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.soap">
  <h3 class="title">SOAP</h3>

  <p class="simpara">
   Ajout du support pour la notation clark pour les espaces de noms dans la carte de classes.
   Il est désormais possible de spécifier des entrées dans une carte de classes avec la notation clark
   pour résoudre un type avec un espace de noms spécifique à une classe spécifique.
   Par exemple : <code class="code">&#039;{http://example.com}foo&#039; =&gt; &#039;FooClass&#039;</code>.
  </p>

  <p class="simpara">
   Les instances de <span class="interfacename"><a href="class.datetimeinterface.php" class="interfacename">DateTimeInterface</a></span> qui sont
   passées à <code class="literal">xsd:datetime</code> ou des éléments similaires sont maintenant
   sérialisées en tant que telles au lieu d&#039;être sérialisées en tant que chaîne vide.
  </p>

  <p class="simpara">
   La persistence de sessions marche maintenant avec un module de session partagé.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.standard">
  <h3 class="title">Standard</h3>

  
  <p class="simpara">
   
   Ajout d&#039;une nouvelle énumération <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span> avec un nom plus clair
   et une meilleure découvrabilité par rapport aux constantes
   <strong><code><a href="math.constants.php#constant.php-round-half-up">PHP_ROUND_<span class="replaceable">*</span></a></code></strong>.
   De plus, quatre nouveaux modes d&#039;arrondi ont été ajoutés qui ne sont disponibles que via
   la nouvelle énumération <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.xsl">
  <h3 class="title">XSL</h3>

  <p class="simpara">
   Il est désormais possible d&#039;utiliser des paramètres qui contiennent à la fois des guillemets
   simples et doubles.
  </p>

  
  <p class="simpara">
   Il est maintenant possible de passer n&#039;importe quel callable à
   <span class="methodname"><a href="xsltprocessor.registerphpfunctions.php" class="methodname">XSLTProcessor::registerPhpFunctions()</a></span>.
   
  </p>

  <p class="simpara">
   Ajout de <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.maxtemplatedepth">XSLTProcessor::$maxTemplateDepth</a></span> et
   <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.maxtemplatevars">XSLTProcessor::$maxTemplateVars</a></span>
   pour contrôler la profondeur de récursion de l&#039;évaluation du modèle XSL.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.zip">
  <h3 class="title">Zip</h3>

  <p class="simpara">
   Ajout de la constante <strong><code><a href="zip.constants.php#ziparchive.constants.er-truncated-zip">ZipArchive::ER_TRUNCATED_ZIP</a></code></strong>,
   qui a été ajoutée dans libzip 1.11.
  </p>
 </div>

</div><?php manual_footer($setup); ?>