<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration83.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'migration83.incompatible.php',
    1 => 'Changement de r&eacute;trocompatibilit&eacute;',
    2 => 'Changement de r&eacute;trocompatibilit&eacute;',
  ),
  'up' => 
  array (
    0 => 'migration83.php',
    1 => 'Migration de PHP 8.2.x vers PHP 8.3.x',
  ),
  'prev' => 
  array (
    0 => 'migration83.constants.php',
    1 => 'Nouvelles constantes globales',
  ),
  'next' => 
  array (
    0 => 'migration83.deprecated.php',
    1 => 'Fonctionnalit&eacute;s d&eacute;pr&eacute;ci&eacute;es',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'appendices/migration83/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration83.incompatible" class="sect1">
 <h2 class="title">Changement de rétrocompatibilité</h2>

 <div class="sect2" id="migration83.incompatible.core">
  <h3 class="title">PHP Core</h3>

  <div class="sect3" id="migration83.incompatible.core.overflowing-call-stack">

   <h4 class="title">Programmes très proches de déborder la pile d&#039;appels</h4>
   <p class="para">
    Les programmes très proches de déborder la pile d&#039;appels peuvent maintenant
    lancer une <span class="classname"><a href="class.error.php" class="classname">Error</a></span> lorsqu&#039;ils utilisent plus de
    zend.max_allowed_stack_size-zend.reserved_stack_size octets de pile
    (fiber.stack_size-zend.reserved_stack_size pour les fibres).
   </p>
  </div>

  <div class="sect3" id="migration83.incompatible.core.proc-get-status-multiple-times">
   <h4 class="title">Exécuter proc_get_status() plusieurs fois</h4>
   <p class="para">
    Exécuter <span class="function"><a href="function.proc-get-status.php" class="function">proc_get_status()</a></span> plusieurs fois retournera désormais
    toujours la bonne valeur sur les systèmes POSIX. Précédemment, seul le premier appel
    de la fonction retournait la bonne valeur. Exécuter
    <span class="function"><a href="function.proc-close.php" class="function">proc_close()</a></span> après <span class="function"><a href="function.proc-get-status.php" class="function">proc_get_status()</a></span>
    retournera également le bon code de sortie. Précédemment, cela retournait
    <code class="literal">-1</code>.
    En interne, cela fonctionne en mettant en cache le résultat sur les systèmes POSIX.
    Si le comportement précédent est requis, il est possible de vérifier la clé
    <code class="literal">&quot;cached&quot;</code> dans le tableau retourné par
    <span class="function"><a href="function.proc-get-status.php" class="function">proc_get_status()</a></span> pour vérifier si le résultat a été mis en cache.
   </p>
  </div>

  <div class="sect3" id="migration83.incompatible.core.zend-max-execution-timers">
   <h4 class="title">Minuteries d&#039;exécution maximales de Zend</h4>
   <p class="para">
    Les minuteries d&#039;exécution maximales de Zend sont maintenant activées par défaut pour les versions ZTS sur
    Linux.
   </p>
  </div>

  <div class="sect3" id="migration83.incompatible.core.traits-with-static-properties">
   <h4 class="title">Utilisation des traits avec des propriétés statiques</h4>
   <p class="para">
    L&#039;utilisation des traits avec des propriétés statiques redéclarera désormais
    les propriétés statiques héritées de la classe parente. Cela créera un stockage
    de propriétés statiques séparé pour la classe actuelle. Cela est analogue à
    l&#039;ajout de la propriété statique à la classe directement sans les traits.
   </p>
  </div>

  <div class="sect3" id="migration83.incompatible.core.negative-index-to-empty-array">
   <h4 class="title">Assigner un index négatif à un tableau vide</h4>
   <p class="para">
    Assigner un index négatif <var class="varname">$n</var> à un tableau vide fera en sorte que
    le prochain index soit <code class="code">$n+1</code> au lieu de <code class="literal">0</code>.
   </p>
  </div>

  <div class="sect3" id="migration83.incompatible.core.class-constant-visibility-check">
   <h4 class="title">Vérification de la variance de la visibilité des constantes de classe</h4>
   <p class="para">
    La variance de la visibilité des constantes de classe est maintenant correctement vérifiée lorsqu&#039;elle est héritée
    des interfaces.
   </p>
  </div>

  <div class="sect3" id="migration83.incompatible.core.weakmap-entries-maps-to-itself">
   <h4 class="title">Entrées WeakMap dont la clé est mappée sur elle-même</h4>
   <p class="para">
    Les entrées <span class="classname"><a href="class.weakmap.php" class="classname">WeakMap</a></span> dont la clé est mappée sur elle-même (éventuellement
    de manière transitive) peuvent maintenant être supprimées lors de la collecte des cycles si la clé n&#039;est pas
    atteignable sauf en itérant sur le WeakMap (l&#039;atteignabilité via l&#039;itération est
    considérée comme faible).
    Auparavant, de telles entrées ne seraient jamais automatiquement supprimées.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration83.incompatible.date">
  <h3 class="title">Date</h3>

  <p class="para">
   L&#039;extension DateTime a introduit des exceptions et erreurs spécifiques aux dates
   sous les hiérarchies <span class="classname"><a href="class.dateerror.php" class="classname">DateError</a></span> et
   <span class="classname"><a href="class.dateexception.php" class="classname">DateException</a></span>, au lieu de warnings et
   exceptions génériques. Cela améliore la gestion des erreurs, au détriment
   de devoir vérifier les erreurs et exceptions.
  </p>
 </div>

 <div class="sect2" id="migration83.incompatible.dom">
  <h3 class="title">DOM</h3>

  <p class="para">
   Appeler <span class="methodname"><a href="domchildnode.after.php" class="methodname">DOMChildNode::after()</a></span>,
   <span class="methodname"><a href="domchildnode.before.php" class="methodname">DOMChildNode::before()</a></span>,
   <span class="methodname"><a href="domchildnode.replacewith.php" class="methodname">DOMChildNode::replaceWith()</a></span>
   sur un nœud qui n&#039;a pas de parent est maintenant une opération nulle
   au lieu de lever une exception d&#039;hiérarchie, ce qui est le comportement
   exigé par la spécification DOM.
  </p>

  <p class="para">
   Utiliser les méthodes <span class="classname"><a href="class.domparentnode.php" class="classname">DOMParentNode</a></span>
   et <span class="classname"><a href="class.domchildnode.php" class="classname">DOMChildNode</a></span> sans document fonctionne 
   maintenant au lieu de lancer une <strong><code><a href="dom.constants.php#constant.dom-hierarchy-request-err">DOM_HIERARCHY_REQUEST_ERR</a></code></strong>
   <span class="classname"><a href="class.domexception.php" class="classname">DOMException</a></span>.
   Cela est conforme au comportement exigé par la spécification DOM.
  </p>

  <p class="para">
   Appeler <span class="methodname"><a href="domdocument.createattributens.php" class="methodname">DOMDocument::createAttributeNS()</a></span> sans spécifier
   de préfixe créerait incorrectement un namespace par défaut, plaçant l&#039;élément
   à l&#039;intérieur du namespace au lieu de l&#039;attribut. Ce bogue est maintenant corrigé.
  </p>

  <p class="para">
   <span class="methodname"><a href="domdocument.createattributens.php" class="methodname">DOMDocument::createAttributeNS()</a></span> lancerait précédemment
   incorrectement une <strong><code>DOM_NAMESPACE_ERRNAMESPACE_ERR</code></strong>
   <span class="classname"><a href="class.domexception.php" class="classname">DOMException</a></span> lorsque le préfixe était déjà utilisé pour un
   URI différent. Il choisit maintenant correctement un préfixe différent lorsqu&#039;il y a un
   conflit de nom de préfixe.
  </p>

  <p class="para">
   De nouvelles méthodes et propriétés ont été ajoutées à certaines classes DOM.
   Si une classe utilisateur hérite de ces classes et déclare une méthode ou une propriété
   avec le même nom, les déclarations doivent être compatibles. Sinon, une erreur de compilation
   typique sur des déclarations incompatibles sera lancée.
   Voir la <a href="migration83.new-features.php#migration83.new-features.dom" class="link">liste des nouvelles fonctionnalités</a>
   et <a href="migration83.new-functions.php#migration83.new-functions.dom" class="link">nouvelles fonctions</a> pour
   une liste des méthodes et propriétés nouvellement implémentées.
  </p>
 </div>

 <div class="sect2" id="migration83.incompatible.ffi">
  <h3 class="title">FFI</h3>

  <p class="para">
   Les fonctions C qui ont un type de retour de <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> retournent maintenant
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> au lieu de retourner l&#039;objet suivant <code class="literal">object(FFI\CData:void) { }</code>.
  </p>
 </div>

 <div class="sect2" id="migration83.incompatible.opcache">
  <h3 class="title">Opcache</h3>

  <p class="para">
   La directive INI <a href="opcache.configuration.php#ini.opcache.consistency-checks" class="link">opcache.consistency_checks</a>
   a été supprimée. Cette fonctionnalité était cassée avec le tracing JIT,
   ainsi qu&#039;avec le cache d&#039;héritage, et a été désactivée sans moyen de
   l&#039;activer à partir de PHP 8.1.18 et PHP 8.2.5.
   Le tracing JIT et le cache d&#039;héritage peuvent modifier la shm après que le script
   ait été persisté en invalidant sa somme de contrôle. La tentative de correction a sauté
   les pointeurs modifiables mais a été rejetée en raison de la complexité. Pour cette
   raison, il a été décidé de supprimer la fonctionnalité.
  </p>
 </div>

 <div class="sect2" id="migration83.incompatible.phar">
  <h3 class="title">Phar</h3>

  <p class="para">
   Les types des constantes de la classe <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> sont maintenant déclarés.
  </p>
 </div>

 <div class="sect2" id="migration83.incompatible.standard">
  <h3 class="title">Standard</h3>

  <p class="para">
   La fonction <span class="function"><a href="function.range.php" class="function">range()</a></span> a subi divers changements :
   <ul class="simplelist">
    <li>Une <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> est maintenant lancée lors du passage d'<span class="type"><a href="language.types.object.php" class="type object">object</a></span>s,
    <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>s, ou <span class="type"><a href="language.types.array.php" class="type array">array</a></span>s en tant qu'entrées de limites.</li>
    <li>Une <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> plus descriptive est lancée lors du passage de <code class="literal">0</code>
    pour <code class="parameter">$step</code>.</li>
    <li>Une <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> est maintenant lancée lors de l'utilisation d'un <code class="parameter">$step</code>
    négatif pour les plages croissantes.</li>
    <li>Si <code class="parameter">$step</code> est un flottant qui peut être interprété
    comme un entier, c'est maintenant fait.</li>
    <li>Une <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> est maintenant lancée si l'un des arguments
    est infini ou NAN.</li>
    <li>Un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> est émis si 
    <code class="parameter">$start</code> ou <code class="parameter">$end</code> est une chaîne
    vide. La valeur continue d'être convertie en la valeur <code class="literal">0</code>.</li>
    <li>Un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> est maintenant émis si
    <code class="parameter">$start</code> ou <code class="parameter">$end</code> a plus d'un
    octet, seulement si c'est une chaîne non numérique.</li>
    <li>Un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> est maintenant émis si
    <code class="parameter">$start</code> ou <code class="parameter">$end</code> est converti en un
    entier car l'autre entrée de limite est un nombre.
    (par exemple : <code class="code">range(5, &#039;z&#039;);</code>).</li>
    <li>Un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> est maintenant émis si
    <code class="parameter">$step</code> est un flottant lors de la génération d'une plage de
    caractères, sauf si les deux entrées de limites sont des chaînes numériques (par exemple :
    <code class="code">range(&#039;5&#039;, &#039;9&#039;, 0.5);</code> ne produit pas de warning).</li>
    <li><span class="function"><a href="function.range.php" class="function">range()</a></span> produit maintenant une liste de caractères si l'une
    des entrées de limites est un chiffre en chaîne au lieu de convertir l'autre entrée
    en entier (par exemple : <code class="code">range(&#039;9&#039;, &#039;A&#039;);</code>).</li>
   </ul>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />range</span><span style="color: #007700">(</span><span style="color: #DD0000">'9'</span><span style="color: #007700">, </span><span style="color: #DD0000">'A'</span><span style="color: #007700">);  </span><span style="color: #FF8000">// ["9", ":", ";", "&lt;", "=", "&gt;", "?", "@", "A"], à partir de PHP 8.3.0<br /></span><span style="color: #0000BB">range</span><span style="color: #007700">(</span><span style="color: #DD0000">'9'</span><span style="color: #007700">, </span><span style="color: #DD0000">'A'</span><span style="color: #007700">);  </span><span style="color: #FF8000">// [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], avant PHP 8.3.0<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   <span class="function"><a href="function.number-format.php" class="function">number_format()</a></span> gère maintenant les valeurs négatives de
   <code class="parameter">$decimals</code> en arrondissant 
   <code class="parameter">$num</code> à <code class="code">abs($decimals)</code> chiffres avant le
   séparateur décimal. Précédemment, les valeurs négatives de <code class="parameter">$decimals</code>
   étaient ignorées.
  </p>

  <p class="para">
   Le drapeau d&#039;erreur de <span class="function"><a href="function.file.php" class="function">file()</a></span> vérifie maintenant tous les drapeaux invalides.
   Notamment <strong><code><a href="filesystem.constants.php#constant.file-append">FILE_APPEND</a></code></strong> était précédemment accepté silencieusement.
  </p>
 </div>

 <div class="sect2" id="migration83.incompatible.SNMP">
  <h3 class="title">SNMP</h3>

  <p class="para">
   Les types des constantes de la classe <span class="classname"><a href="class.snmp.php" class="classname">SNMP</a></span> sont maintenant déclarés.
  </p>
 </div>

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