<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration80.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'migration80.incompatible.php',
    1 => 'Modifications entra&icirc;nant une incompatibilit&eacute; ascendante',
    2 => 'Modifications entra&icirc;nant une incompatibilit&eacute; ascendante',
  ),
  'up' => 
  array (
    0 => 'migration80.php',
    1 => 'Migration de PHP 7.4.x vers PHP 8.0.x',
  ),
  'prev' => 
  array (
    0 => 'migration80.new-classes.php',
    1 => 'Nouvelles classes et interfaces',
  ),
  'next' => 
  array (
    0 => 'migration80.deprecated.php',
    1 => 'Fonctionnalit&eacute;s obsol&egrave;tes',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'appendices/migration80/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration80.incompatible" class="sect1">
 <h2 class="title">Modifications entraînant une incompatibilité ascendante</h2>

 <div class="sect2" id="migration80.incompatible.core">
  <h3 class="title">Cœur de PHP</h3>

  <div class="sect3" id="migration80.incompatible.core.string-number-comparision">
   <h4 class="title">Comparaison entre une chaîne de caractères et un nombre</h4>

   <p class="para">
    Les comparaisons non strictes entre les nombres et les chaînes non numériques fonctionnent désormais en transformant le nombre en
    chaîne et en comparant les chaînes. Les comparaisons entre les nombres et les chaînes numériques continuent de
    fonctionner comme auparavant. Cela signifie notamment que <code class="code">0 == &quot;not-a-number&quot;</code> est désormais considéré comme faux.
    <table class="doctable informaltable">
     
      <thead>
       <tr>
        <th>Comparaison</th>
        <th>Avant</th>
        <th>Après</th>
       </tr>

      </thead>

      <tbody class="tbody">
       <tr>
        <td><code class="code">0 == &quot;0&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">0 == &quot;0.0&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">0 == &quot;foo&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">0 == &quot;&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">42 == &quot;   42&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">42 == &quot;42foo&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
       </tr>

      </tbody>
     
    </table>

    
   </p>
  </div>

  <div class="sect3" id="migration80.incompatible.core.other">
   <h4 class="title">Autres changements incompatibles</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      <code class="literal">match</code> est désormais un mot-clé réservé.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="literal">mixed</code> est désormais un mot réservé, il ne peut donc pas être utilisé pour nommer une classe, une interface ou un trait, et il est également interdit de l&#039;utiliser dans les espaces de noms.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les échecs d&#039;assertion sont maintenant lancés par défaut. Si l&#039;ancien comportement est souhaité,
      <code class="code">assert.exception=0</code> peut être défini dans les paramètres INI.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les méthodes portant le même nom que la classe ne sont plus interprétées comme des constructeurs. La méthode
      <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> doit être utilisée à la place.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La possibilité d&#039;appeler des méthodes non statiques de manière statique a été supprimée. Ainsi,
      <span class="function"><a href="function.is-callable.php" class="function">is_callable()</a></span> échouera lors de la vérification d&#039;une méthode non statique avec un nom de classe
      (il faut vérifier avec une instance d&#039;objet).
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les castings <code class="code">(real)</code> et <code class="code">(unset)</code> ont été supprimés.
     </p>
    </li>
    <li class="listitem">
      <p class="para">
       La directive ini <a href="errorfunc.configuration.php#ini.track-errors" class="link">track_errors</a> a été supprimée.
       Cela signifie que <var class="varname">php_errormsg</var> n&#039;est plus disponible. La fonction
       <span class="function"><a href="function.error-get-last.php" class="function">error_get_last()</a></span> peut être utilisée à la place.
      </p>
    </li>
    <li class="listitem">
     <p class="para">
      La possibilité de définir des constantes insensibles à la casse a été supprimée. Le troisième argument de
      <span class="function"><a href="function.define.php" class="function">define()</a></span> ne peut plus être <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La possibilité de spécifier un autochargeur en utilisant une fonction <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> a été supprimée.
      <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> doit être utilisée à la place.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      L&#039;argument <code class="parameter">errcontext</code> ne sera plus passé aux gestionnaires d&#039;erreurs personnalisés
      paramétrés avec <span class="function"><a href="function.set-error-handler.php" class="function">set_error_handler()</a></span>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.create-function.php" class="function">create_function()</a></span> a été supprimée. Les fonctions anonymes peuvent être utilisées à la place.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.each.php" class="function">each()</a></span> a été supprimée. <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a> ou <span class="classname"><a href="class.arrayiterator.php" class="classname">ArrayIterator</a></span>
      doivent être utilisées à la place.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La possibilité de délier <var class="varname">this</var> des fermetures qui ont été créées à partir d&#039;une méthode,
      en utilisant <span class="methodname"><a href="closure.fromcallable.php" class="methodname">Closure::fromCallable()</a></span> ou
      <span class="methodname"><a href="reflectionmethod.getclosure.php" class="methodname">ReflectionMethod::getClosure()</a></span> a été supprimée.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La possibilité de délier <var class="varname">this</var> des fermetures appropriées qui contiennent des utilisations de
      <var class="varname">this</var> a également été supprimée.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La possibilité d&#039;utiliser <span class="function"><a href="function.array-key-exists.php" class="function">array_key_exists()</a></span> avec des objets a été supprimée.
      <span class="function"><a href="function.isset.php" class="function">isset()</a></span> ou <span class="function"><a href="function.property-exists.php" class="function">property_exists()</a></span> peuvent être utilisées à la place.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Le comportement de <span class="function"><a href="function.array-key-exists.php" class="function">array_key_exists()</a></span> concernant le type du paramètre
      <code class="parameter">key</code> a été rendu cohérent avec <span class="function"><a href="function.isset.php" class="function">isset()</a></span> et
      l&#039;accès normal aux tableaux. Tous les types de clés utilisent maintenant les coercions habituels et les clés de type tableau/objet lancent une
      <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Tout tableau dont la première clé numérique est un nombre <span class="replaceable">n</span> utilisera
      <span class="replaceable">n+1</span> pour sa prochaine clé implicite, même si <span class="replaceable">n</span> est
      négatif.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Le niveau de signalement des erreurs par défaut (error_reporting) est désormais <strong><code><a href="errorfunc.constants.php#constant.e-all">E_ALL</a></code></strong>. Auparavant, il excluait
      <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> et <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <a href="errorfunc.configuration.php#ini.display-startup-errors" class="link">display_startup_errors</a> est désormais activée
      par défaut.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      L&#039;utilisation de <span class="type">parent</span> à l&#039;intérieur d&#039;une classe qui n&#039;a pas de parent entraîne désormais une
      erreur fatale à la compilation.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      L&#039;opérateur <code class="literal">@</code> ne silence plus les erreurs fatales
      (<strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-core-error">E_CORE_ERROR</a></code></strong>,
      <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-user-error">E_USER_ERROR</a></code></strong>,
      <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-parse">E_PARSE</a></code></strong>). Les gestionnaires d&#039;erreurs qui
      s&#039;attendent à ce que error_reporting soit égal à <code class="literal">0</code> lorsque <code class="literal">@</code> est utilisé,
      doivent être ajustés pour utiliser une vérification de masque à la place :
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Remplacer<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_error_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$err_no</span><span style="color: #007700">, </span><span style="color: #0000BB">$err_msg</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$linenum</span><span style="color: #007700">) {<br />    if (</span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">() == </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />        return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />    }<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// Par<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_error_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$err_no</span><span style="color: #007700">, </span><span style="color: #0000BB">$err_msg</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$linenum</span><span style="color: #007700">) {<br />    if (!(</span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">() &amp; </span><span style="color: #0000BB">$err_no</span><span style="color: #007700">)) {<br />        return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />    }<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      En outre, il faut veiller à ce que les messages d&#039;erreur ne soient pas affichés dans les environnements
      de production, ce qui peut entraîner des fuites d&#039;informations. Veillez à ce que l&#039;option
      <code class="code">display_errors=Off</code> soit utilisée en conjonction avec la journalisation des erreurs.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="literal">#[</code> n&#039;est plus interprété comme le début d&#039;un commentaire,
      car cette syntaxe est désormais utilisée pour les attributs.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les erreurs d&#039;héritage dues à des signatures de méthodes incompatibles (violations de LSP)
      génèrent désormais une erreur fatale. Auparavant, un avertissement était généré dans certains cas.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La priorité de l&#039;opérateur de concaténation a été modifiée par rapport aux décalages de bits, à l&#039;addition
      ainsi qu&#039;à la soustraction.
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Sum: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// était auparavant interprété comme:<br /></span><span style="color: #007700">echo (</span><span style="color: #DD0000">"Sum: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$a</span><span style="color: #007700">) + </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// est désormais interprété comme:<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Sum:" </span><span style="color: #007700">. (</span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les arguments avec une valeur par défaut qui se résout en <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> à l&#039;exécution ne marqueront plus implicitement
      le type d&#039;argument comme nullable. Il faut utiliser soit un type explicite nullable, soit une valeur par défaut
      explicite <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> à la place.
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Remplacer<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">int $arg </span><span style="color: #007700">= </span><span style="color: #0000BB">CONST_RESOLVING_TO_NULL</span><span style="color: #007700">) {}<br /></span><span style="color: #FF8000">// Par<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(?</span><span style="color: #0000BB">int $arg </span><span style="color: #007700">= </span><span style="color: #0000BB">CONST_RESOLVING_TO_NULL</span><span style="color: #007700">) {}<br /></span><span style="color: #FF8000">// Ou<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">int $arg </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Un certain nombre d&#039;avertissements ont été convertis en exceptions <span class="classname"><a href="class.error.php" class="classname">Error</a></span>:
     </p>
     <p class="para">
      <ul class="simplelist">
       <li>
        Tentative d'écriture sur une propriété d'un non-objet. Auparavant, cela 
        créait implicitement un objet stdClass pour null, false et les chaînes vides.
       </li>
       <li>
        Tentative d'ajout d'un élément à un tableau pour lequel la clé PHP_INT_MAX
        est déjà utilisée.
       </li>
       <li>
        Tentative d'utilisation d'un type invalide (tableau ou objet)
        comme clé de tableau ou comme index de chaîne de caractères.
       </li>
       <li>Tentative d'écriture sur un index de tableau d'une valeur scalaire.</li>
       <li>Tentative de décompactage d'un non tableau/Traversable.</li>
       <li>
        Tentative d'accès à des constantes non qualifiées qui sont indéfinies.
        Auparavant, les accès à des constantes non qualifiées entraînaient un avertissement et étaient interprétés comme des chaînes de caractères.
       </li>
       <li>
        Passer le nombre incorrect d'arguments à une fonction intégrée non variadique
        entraînera le déclenchement d'une <span class="classname"><a href="class.argumentcounterror.php" class="classname">ArgumentCountError</a></span>.
       </li>
       <li>
        Passer des types compteurs invalides à <span class="function"><a href="function.count.php" class="function">count()</a></span>
        entraînera le déclenchement d'une <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>.
       </li>
      </ul>
     </p>
     <p class="para">
      Un certain nombre de notices ont été converties en avertissements :
     </p>
     <p class="para">
      <ul class="simplelist">
       <li>Tentative de lecture d'une variable non définie.</li>
       <li>Tentative de lecture d'une propriété non définie.</li>
       <li>Tentative de lecture d'une clé de tableau non définie.</li>
       <li>Tentative de lecture d'une propriété d'un non-objet.</li>
       <li>Tentative d'accès à un index de tableau d'un non-tableau.</li>
       <li>Tentative de conversion d'un tableau en chaîne de caractères.</li>
       <li>Tentative d'utilisation d'une ressource comme clé de tableau.</li>
       <li>Tentative d'utilisation de null, d'un booléen ou d'un nombre flottant comme index de chaîne.</li>
       <li>Tentative de lecture d'un index de chaîne hors limites.</li>
       <li>Tentative d'assignation d'une chaîne vide à un index de chaîne.</li>
      </ul>
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Tenter d&#039;assigner plusieurs octets à un index de chaîne émettra désormais un avertissement.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les caractères inattendus dans les fichiers source (tels que les octets NUL à l&#039;extérieur des chaînes de caractères) entraîneront désormais
      une exception <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> au lieu d&#039;un avertissement de compilation.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les exceptions non capturées passent maintenant par un &quot;arrêt propre&quot;, ce qui signifie que les destructeurs seront appelés
      après une exception non capturée.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      L&#039;erreur fatale à la compilation &quot;Only variables can be passed by reference&quot; a été retardée jusqu&#039;à 
      l&#039;exécution, et convertie en une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> &quot;Argument cannot be passed by reference&quot;.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Certaines notices &quot;Only variables should be passed by reference&quot; ont été converties en exception &quot;Argument
      cannot be passed by reference&quot;.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Le nom généré pour les classes anonymes a changé. Il inclura désormais le nom du premier
      parent ou interface :
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">new class extends </span><span style="color: #0000BB">ParentClass </span><span style="color: #007700">{};<br /></span><span style="color: #FF8000">// -&gt; ParentClass@anonymous<br /></span><span style="color: #007700">new class implements </span><span style="color: #0000BB">FirstInterface</span><span style="color: #007700">, </span><span style="color: #0000BB">SecondInterface </span><span style="color: #007700">{};<br /></span><span style="color: #FF8000">// -&gt; FirstInterface@anonymous<br /></span><span style="color: #007700">new class {};<br /></span><span style="color: #FF8000">// -&gt; class@anonymous<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      Le nom ci-dessus est toujours suivi d&#039;un octet NUL et d&#039;un suffixe unique.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les références de méthodes de traits non absolues dans les adaptations d&#039;alias de traits doivent désormais être
      non ambiguës :
     </p>
     <p class="para">
      <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">X </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">T1</span><span style="color: #007700">, </span><span style="color: #0000BB">T2 </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">func </span><span style="color: #007700">as </span><span style="color: #0000BB">otherFunc</span><span style="color: #007700">;<br />    }<br />    function </span><span style="color: #0000BB">func</span><span style="color: #007700">() {}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      Si <code class="code">T1::func()</code> et <code class="code">T2::func()</code> existent tous les deux, ce code était auparavant 
      accepté silencieusement, et func était supposé faire référence à <code class="code">T1::func</code>. Désormais, il génère une
      erreur fatale, et <code class="code">T1::func</code> ou <code class="code">T2::func</code> doivent être
      écrits explicitement.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La signature des méthodes abstraites définies dans les traits est maintenant vérifiée par rapport à la 
      méthode dans la classe d&#039;implémentation:
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">trait </span><span style="color: #0000BB">MyTrait </span><span style="color: #007700">{<br />    abstract private function </span><span style="color: #0000BB">neededByTrait</span><span style="color: #007700">(): </span><span style="color: #0000BB">string</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">MyTrait</span><span style="color: #007700">;<br /><br />    </span><span style="color: #FF8000">// Erreur, en raison d'une incompatibilité de type de retour.<br />    </span><span style="color: #007700">private function </span><span style="color: #0000BB">neededByTrait</span><span style="color: #007700">(): </span><span style="color: #0000BB">int </span><span style="color: #007700">{ return </span><span style="color: #0000BB">42</span><span style="color: #007700">; }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les fonctions désactivées sont désormais traitées exactement comme des fonctions inexistantes. L&#039;appel d&#039;une fonction
      la signalera comme inconnue, et il est désormais possible de redéfinir une fonction désactivée.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les enveloppes de flux <code class="literal">data://</code> ne sont plus inscriptibles, ce qui correspond au comportement
      documenté.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les opérateurs arithmétiques et binaires <code class="literal">+</code>, <code class="literal">-</code>,
      <code class="literal">*</code>, <code class="literal">/</code>, <code class="literal">**</code>, <code class="literal">%</code>,
      <code class="literal">&lt;&lt;</code>, <code class="literal">&gt;&gt;</code>, <code class="literal">&amp;</code>,
      <code class="literal">|</code>, <code class="literal">^</code>, <code class="literal">~</code>, <code class="literal">++</code>,
      <code class="literal">--</code> lancent désormais systématiquement une <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> lorsqu&#039;un
      des opérandes est un <a href="language.types.array.php" class="link">tableau</a>, <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ou un <a href="language.types.object.php" class="link">objet</a> non surchargé. La seule exception à cette règle est
      l&#039;opération de fusion de tableau <code class="literal">+</code>, qui reste supportée.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La conversion de nombres flottants en chaînes de caractères se fera désormais indépendamment de la localisation.
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />setlocale</span><span style="color: #007700">(</span><span style="color: #0000BB">LC_ALL</span><span style="color: #007700">, </span><span style="color: #DD0000">"de_DE"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">3.14</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$f</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// Avant : 3,14<br />// Maintenant : 3.14<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      Voir <span class="function"><a href="function.printf.php" class="function">printf()</a></span>, <span class="function"><a href="function.number-format.php" class="function">number_format()</a></span> et
      <span class="methodname"><strong>NumberFormatter()</strong></span> pour personnaliser le formatage des nombres.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La prise en charge des accolades pour l&#039;accès aux index a été supprimée.
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Au lieu de :<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">{</span><span style="color: #0000BB">0</span><span style="color: #007700">};<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">{</span><span style="color: #DD0000">"key"</span><span style="color: #007700">};<br /></span><span style="color: #FF8000">// Écrire :<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"key"</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      L&#039;application du modificateur final sur une méthode privée produira désormais un avertissement à moins que cette méthode ne soit
      le constructeur.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Si un constructeur d&#039;objet appelle <span class="function"><a href="function.exit.php" class="function">exit()</a></span>, le destructeur d&#039;objet n&#039;est plus
      appelé. Cela correspond au comportement lorsque le constructeur lance une exception.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les noms d&#039;espace de nommage ne peuvent plus contenir d&#039;espace blanc : Alors que <code class="code">Foo\Bar</code> sera reconnu
      comme un nom à espace de noms, <code class="code">Foo \ Bar</code> ne le sera pas. Inversement, les mots-clés réservés sont désormais
      autorisés en tant que segments d&#039;espace de noms, ce qui peut également modifier l&#039;interprétation du code :
      <code class="code">new\x</code> est maintenant la même chose que <code class="code">constant(&#039;new\x&#039;)</code>, et pas
      <code class="code">new \x()</code>.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les ternaires imbriqués nécessitent désormais des parenthèses explicites.
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.debug-backtrace.php" class="function">debug_backtrace()</a></span> et <span class="methodname"><a href="exception.gettrace.php" class="methodname">Exception::getTrace()</a></span> ne fourniront plus de
      références aux arguments. Il ne sera plus possible de modifier les arguments d&#039;une fonction
      par le biais de la trace.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La gestion des chaînes numériques a été modifiée pour être plus intuitive et moins sujette aux erreurs. L&#039;espacement
      de fin est désormais autorisé dans les chaînes numériques pour des raisons de cohérence avec le traitement des espaces
      de tête. Ceci affecte principalement :
     </p>
     <p class="para">
      <ul class="simplelist">
       <li>La fonction <span class="function"><a href="function.is-numeric.php" class="function">is_numeric()</a></span></li>
       <li>Les comparaisons entre deux chaînes de caractères</li>
       <li>Les déclarations de type</li>
       <li>Les opérations d'incrémentation et de décrémentation</li>
      </ul>
     </p>
     <p class="para">
      Le concept de &quot;chaînes débutant numériquement&quot; a été pratiquement abandonné ; les cas où il subsiste
      existent afin de faciliter la migration. Les chaînes de caractères qui émettaient une erreur <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> &quot;A non
      wellformed numeric value encountered&quot; émettront désormais une erreur <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> &quot;A
      nonumeric value encountered&quot; et toutes les chaînes qui émettaient une erreur <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> &quot;A
      non-numeric value encountered&quot; émettront désormais une erreur de type
      <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>. Ceci affecte principalement :
     </p>
     <p class="para">
      <ul class="simplelist">
       <li>les opérations arithmétiques</li>
       <li>les opérations binaires</li>
      </ul>
     </p>
     <p class="para">
      Cette modification de <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> à <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> affecte également l&#039;erreur
      <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> &quot;Illegal string offset &#039;string&#039;&quot; pour les index de chaîne illégaux. Le
      comportement des transformations explicites en int/float à partir de chaînes de caractères n&#039;a pas été modifié.
     
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les arguments et les types de retour des méthodes magiques seront désormais vérifiés s&#039;ils ont été déclarés.
      Les signatures doivent correspondre à la liste suivante :
     </p>
     <p class="para">
      <ul class="simplelist">
       <li><code class="code">__call(string $name, array $arguments): mixed</code></li>
       <li><code class="code">__callStatic(string $name, array $arguments): mixed</code></li>
       <li><code class="code">__clone(): void</code></li>
       <li><code class="code">__debugInfo(): ?array</code></li>
       <li><code class="code">__get(string $name): mixed</code></li>
       <li><code class="code">__invoke(mixed $arguments): mixed</code></li>
       <li><code class="code">__isset(string $name): bool</code></li>
       <li><code class="code">__serialize(): array</code></li>
       <li><code class="code">__set(string $name, mixed $value): void</code></li>
       <li><code class="code">__set_state(array $properties): object</code></li>
       <li><code class="code">__sleep(): array</code></li>
       <li><code class="code">__unserialize(array $data): void</code></li>
       <li><code class="code">__unset(string $name): void</code></li>
       <li><code class="code">__wakeup(): void</code></li>
      </ul>
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Les clés des tableaux <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span> seront désormais interprétées comme des noms de paramètres,
      au lieu d&#039;être ignorées silencieusement.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      La déclaration d&#039;une fonction appelée <code class="literal">assert()</code> à l&#039;intérieur d&#039;un espace de noms
      n&#039;est plus autorisée, et émet une <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong>.
      La fonction <span class="function"><a href="function.assert.php" class="function">assert()</a></span> est soumise à un traitement spécial par le moteur,
      ce qui peut conduire à un comportement incohérent lors de la définition d&#039;une fonction de l&#039;espace de noms portant le même nom.
     </p>
    </li>
   </ul>
  </div>
 </div>

 <div class="sect2" id="migration80.incompatible.resource2object">
  <h3 class="title">Migration des ressources vers les objets</h3>

  <p class="para">
   Plusieurs <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>s ont été migrées en <a href="language.types.object.php" class="link">objet</a>s.
   Les vérifications de la valeur retournée utilisant <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span> devraient être remplacées par des vérifications pour <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.curl-init.php" class="function">curl_init()</a></span> retourne désormais un objet <span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span>
      plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>. La fonction <span class="function"><a href="function.curl-close.php" class="function">curl_close()</a></span> n&#039;a plus d&#039;effet,
      l&#039;instance <span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span> est automatiquement détruite si elle n&#039;est
      plus référencée.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.curl-multi-init.php" class="function">curl_multi_init()</a></span> retourne désormais un objet <span class="classname"><a href="class.curlmultihandle.php" class="classname">CurlMultiHandle</a></span>
      plutôt qu&#039;un <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>. La fonction <span class="function"><a href="function.curl-multi-close.php" class="function">curl_multi_close()</a></span> n&#039;a plus d&#039;effet,
      l&#039;instance <span class="classname"><a href="class.curlmultihandle.php" class="classname">CurlMultiHandle</a></span> est automatiquement détruite si elle n&#039;est plus référencée.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
     <span class="function"><a href="function.curl-share-init.php" class="function">curl_share_init()</a></span> retourne désormais un objet <span class="classname"><a href="class.curlsharehandle.php" class="classname">CurlShareHandle</a></span>
      plutôt qu&#039;un <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>. La fonction <span class="function"><a href="function.curl-share-close.php" class="function">curl_share_close()</a></span> n&#039;a plus d&#039;effet,
      l&#039;instance <span class="classname"><a href="class.curlsharehandle.php" class="classname">CurlShareHandle</a></span> est automatiquement détruite si elle n&#039;est plus référencée.
     </p>
    </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-init.php" class="function">enchant_broker_init()</a></span> retourne désormais un objet <span class="classname"><a href="class.enchantbroker.php" class="classname">EnchantBroker</a></span>
     plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-request-dict.php" class="function">enchant_broker_request_dict()</a></span> et
     <span class="function"><a href="function.enchant-broker-request-pwl-dict.php" class="function">enchant_broker_request_pwl_dict()</a></span> retournent désormais un objet
     <span class="classname"><a href="class.enchantdictionary.php" class="classname">EnchantDictionary</a></span> au lieu d&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;extension GD utilise désormais les objets <span class="classname"><a href="class.gdimage.php" class="classname">GdImage</a></span> comme structure de données sous-jacente
     pour les images, plutôt que des <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>s.
     La fonction <span class="function"><a href="function.imagedestroy.php" class="function">imagedestroy()</a></span> n&#039;a plus d&#039;effet ; à la place, l&#039;instance est automatiquement détruite si elle n&#039;est plus référencée.
     <span class="classname"><a href="class.gdimage.php" class="classname">GdImage</a></span> est automatiquement détruite si elle n&#039;est plus référencée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
    <span class="function"><a href="function.openssl-x509-read.php" class="function">openssl_x509_read()</a></span> et <span class="function"><a href="function.openssl-csr-sign.php" class="function">openssl_csr_sign()</a></span> retournent désormais
     un objet <span class="classname"><a href="class.opensslcertificate.php" class="classname">OpenSSLCertificate</a></span> plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
     La fonction <span class="function"><a href="function.openssl-x509-free.php" class="function">openssl_x509_free()</a></span> est obsolète et n&#039;a plus d&#039;effet,
     l&#039;instance <span class="classname"><a href="class.opensslcertificate.php" class="classname">OpenSSLCertificate</a></span> est automatiquement détruite si elle n&#039;est plus référencée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.openssl-csr-new.php" class="function">openssl_csr_new()</a></span> retourne désormais un objet
     <span class="classname"><a href="class.opensslcertificatesigningrequest.php" class="classname">OpenSSLCertificateSigningRequest</a></span> plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.openssl-pkey-new.php" class="function">openssl_pkey_new()</a></span> retourne désormais un objet
     <span class="classname"><a href="class.opensslasymmetrickey.php" class="classname">OpenSSLAsymmetricKey</a></span> plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
     La fonction <span class="function"><a href="function.openssl-pkey-free.php" class="function">openssl_pkey_free()</a></span> est obsolète et n&#039;a plus d&#039;effet,
     l&#039;instance <span class="classname"><a href="class.opensslasymmetrickey.php" class="classname">OpenSSLAsymmetricKey</a></span> est automatiquement détruite si elle n&#039;est plus référencée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.shmop-open.php" class="function">shmop_open()</a></span> retourne désormais un objet <span class="classname"><a href="class.shmop.php" class="classname">Shmop</a></span> plutôt qu&#039;une
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>. La fonction <span class="function"><a href="function.shmop-close.php" class="function">shmop_close()</a></span> n&#039;a plus d&#039;effet, et est
     obsolète ; l&#039;instance <span class="classname"><a href="class.shmop.php" class="classname">Shmop</a></span> est automatiquement détruite si elle n&#039;est plus référencée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.socket-create.php" class="function">socket_create()</a></span>, <span class="function"><a href="function.socket-create-listen.php" class="function">socket_create_listen()</a></span>,
     <span class="function"><a href="function.socket-accept.php" class="function">socket_accept()</a></span>, <span class="function"><a href="function.socket-import-stream.php" class="function">socket_import_stream()</a></span>,
     <span class="function"><a href="function.socket-addrinfo-connect.php" class="function">socket_addrinfo_connect()</a></span>, <span class="function"><a href="function.socket-addrinfo-bind.php" class="function">socket_addrinfo_bind()</a></span>, et
     <span class="function"><a href="function.socket-wsaprotocol-info-import.php" class="function">socket_wsaprotocol_info_import()</a></span> retournent désormais un objet
     <span class="classname"><a href="class.socket.php" class="classname">Socket</a></span> plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
     <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span> retourne désormais un tableau d&#039;objets
     <span class="classname"><a href="class.addressinfo.php" class="classname">AddressInfo</a></span> au lieu de <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>s.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.msg-get-queue.php" class="function">msg_get_queue()</a></span> retourne désormais un objet <span class="classname"><a href="class.sysvmessagequeue.php" class="classname">SysvMessageQueue</a></span>
     plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.sem-get.php" class="function">sem_get()</a></span> retourne désormais un objet <span class="classname"><a href="class.sysvsemaphore.php" class="classname">SysvSemaphore</a></span> 
     plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
    <span class="function"><a href="function.shm-attach.php" class="function">shm_attach()</a></span> retourne désormais un objet <span class="classname"><a href="class.sysvsharedmemory.php" class="classname">SysvSharedMemory</a></span> 
     plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.xml-parser-create.php" class="function">xml_parser_create()</a></span> et <span class="function"><a href="function.xml-parser-create-ns.php" class="function">xml_parser_create_ns()</a></span>
     retournent désormais un objet <span class="classname"><a href="class.xmlparser.php" class="classname">XMLParser</a></span> au lieu d&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>. La fonction
     <span class="function"><a href="function.xml-parser-free.php" class="function">xml_parser_free()</a></span> n&#039;a plus d&#039;effet, l&#039;instance de XMLParser
     est automatiquement détruite si elle n&#039;est plus référencée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les fonctions <a href="book.xmlwriter.php" class="link">XMLWriter</a> acceptent et retournent désormais, respectivement, des objets
     <span class="classname"><a href="class.xmlwriter.php" class="classname">XMLWriter</a></span> au lieu de <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>s.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.inflate-init.php" class="function">inflate_init()</a></span> retourne désormais un objet <span class="classname"><a href="class.inflatecontext.php" class="classname">InflateContext</a></span> 
     plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
    <span class="function"><a href="function.deflate-init.php" class="function">deflate_init()</a></span> retourne désormais un objet <span class="classname"><a href="class.deflatecontext.php" class="classname">DeflateContext</a></span> 
     plutôt qu&#039;une <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.com">
  <h3 class="title">COM et .Net (Windows)</h3>

  <p class="para">
   La possibilité d&#039;importer des constantes insensibles à la casse à partir de bibliothèques de types a été supprimée.
   Le deuxième argument de <span class="function"><a href="function.com-load-typelib.php" class="function">com_load_typelib()</a></span> ne peut plus être false ;
   <a href="com.configuration.php#ini.com.autoregister-casesensitive" class="link">com.autoregister_casesensitive</a>
   ne peut plus être désactivé ; les marqueurs insensibles à la casse dans
   <a href="com.configuration.php#ini.com.typelib-file" class="link">com.typelib_file</a> sont ignorés.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.curl">
  <h3 class="title">CURL</h3>

  <p class="para">
   <strong><code><a href="curl.constants.php#constant.curlopt-postfields">CURLOPT_POSTFIELDS</a></code></strong> n&#039;accepte plus les objets sous forme de tableaux. Pour
   interpréter un objet comme un tableau, il faut effectuer un cast explicite <code class="code">(array)</code>. Cela
   s&#039;applique également aux autres options acceptant les tableaux.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.datetime">
  <h3 class="title">Date et heure</h3>

  <p class="para">
   <span class="function"><a href="function.mktime.php" class="function">mktime()</a></span> et <span class="function"><a href="function.gmmktime.php" class="function">gmmktime()</a></span> requièrent désormais au moins un argument.
   <span class="function"><a href="function.time.php" class="function">time()</a></span> peut être utilisée pour obtenir l&#039;horodatage actuel.
  </p>
 </div>

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

  <p class="para">
   Les classes non implémentées de l&#039;extension DOM qui n&#039;avaient pas de comportement et contenaient des données de test
   ont été supprimées. Ces classes ont également été supprimées dans la dernière version du
   standard DOM :
  </p>
  <p class="para">
   <ul class="simplelist">
    <li><span class="classname"><strong class="classname">DOMNameList</strong></span></li>
    <li><span class="classname"><strong class="classname">DomImplementationList</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMConfiguration</strong></span></li>
    <li><span class="classname"><strong class="classname">DomError</strong></span></li>
    <li><span class="classname"><strong class="classname">DomErrorHandler</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMImplementationSource</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMLocator</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMUserDataHandler</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMTypeInfo</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMStringExtend</strong></span></li>
   </ul>
  </p>
  <p class="para">
   Les méthodes non implémentées de l&#039;extension DOM qui n&#039;avaient pas de comportement ont été supprimées :
  </p>
  <p class="para">
   <ul class="simplelist">
    <li><span class="methodname"><strong>DOMNamedNodeMap::setNamedItem()</strong></span></li>
    <li><span class="methodname"><strong>DOMNamedNodeMap::removeNamedItem()</strong></span></li>
    <li><span class="methodname"><strong>DOMNamedNodeMap::setNamedItemNS()</strong></span></li>
    <li><span class="methodname"><strong>DOMNamedNodeMap::removeNamedItemNS()</strong></span></li>
    <li><span class="methodname"><strong>DOMText::replaceWholeText()</strong></span></li>
    <li><span class="methodname"><a href="domnode.comparedocumentposition.php" class="methodname">DOMNode::compareDocumentPosition()</a></span></li>
    <li><span class="methodname"><a href="domnode.isequalnode.php" class="methodname">DOMNode::isEqualNode()</a></span></li>
    <li><span class="methodname"><strong>DOMNode::getFeature()</strong></span></li>
    <li><span class="methodname"><strong>DOMNode::setUserData()</strong></span></li>
    <li><span class="methodname"><strong>DOMNode::getUserData()</strong></span></li>
    <li><span class="methodname"><strong>DOMDocument::renameNode()</strong></span></li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.enchant">
  <h3 class="title">Enchant</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-list-dicts.php" class="function">enchant_broker_list_dicts()</a></span>, <span class="function"><a href="function.enchant-broker-describe.php" class="function">enchant_broker_describe()</a></span> et
     <span class="function"><a href="function.enchant-dict-suggest.php" class="function">enchant_dict_suggest()</a></span> retourneront désormais un tableau vide au lieu de <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.exif">
  <h3 class="title">Exif</h3>

  <p class="para">
   <span class="function"><a href="function.read-exif-data.php" class="function">read_exif_data()</a></span> a été supprimée ; <span class="function"><a href="function.exif-read-data.php" class="function">exif_read_data()</a></span>
   doit être utilisée à la place.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.filter">
  <h3 class="title">Filter</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Les drapeaux <strong><code><a href="filter.constants.php#constant.filter-flag-scheme-required">FILTER_FLAG_SCHEME_REQUIRED</a></code></strong> et
     <strong><code><a href="filter.constants.php#constant.filter-flag-host-required">FILTER_FLAG_HOST_REQUIRED</a></code></strong> pour le filtre
     <strong><code><a href="filter.constants.php#constant.filter-validate-url">FILTER_VALIDATE_URL</a></code></strong> ont été supprimés. Le <code class="literal">schéma</code>
     et l&#039;<code class="literal">hôte</code> sont (et ont toujours été) nécessaires.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les sources <strong><code><a href="filter.constants.php#constant.input-request">INPUT_REQUEST</a></code></strong> et <strong><code><a href="filter.constants.php#constant.input-session">INPUT_SESSION</a></code></strong> pour
     <span class="function"><a href="function.filter-input.php" class="function">filter_input()</a></span> etc. ont été supprimées. Elles n&#039;ont jamais été mises en œuvre et
     leur utilisation a toujours généré un avertissement.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.gd">
  <h3 class="title">GD</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     La fonction obsolète <span class="function"><a href="function.image2wbmp.php" class="function">image2wbmp()</a></span> a été supprimée.
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les fonctions obsolètes <span class="function"><a href="function.png2wbmp.php" class="function">png2wbmp()</a></span> et <span class="function"><a href="function.jpeg2wbmp.php" class="function">jpeg2wbmp()</a></span>
     ont été supprimées.
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Le paramètre par défaut <code class="parameter">mode</code> d&#039;<span class="function"><a href="function.imagecropauto.php" class="function">imagecropauto()</a></span> n&#039;accepte
     plus <code class="literal">-1</code>. <strong><code><a href="image.constants.php#constant.img-crop-default">IMG_CROP_DEFAULT</a></code></strong> doit être utilisé à la place.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Sous Windows, <var class="filename">php_gd2.dll</var> a été renommé en <var class="filename">php_gd.dll</var>.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.gmp">
  <h3 class="title">GMP</h3>

  <p class="para">
   <span class="function"><a href="function.gmp-random.php" class="function">gmp_random()</a></span> a été supprimée. L&#039;une des fonctions <span class="function"><a href="function.gmp-random-range.php" class="function">gmp_random_range()</a></span> ou
   <span class="function"><a href="function.gmp-random-bits.php" class="function">gmp_random_bits()</a></span> doit être utilisée à la place.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.iconv">
  <h3 class="title">Iconv</h3>

  <p class="para">
   Les implémentations iconv qui ne définissent pas correctement <var class="varname">errno</var> en cas d&#039;erreur ne sont
   plus supportées.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.imap">
  <h3 class="title">IMAP</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     L&#039;argument inutilisé <code class="parameter">default_host</code> de <span class="function"><a href="function.imap-headerinfo.php" class="function">imap_headerinfo()</a></span>
     a été supprimé.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La fonction <span class="function"><a href="function.imap-header.php" class="function">imap_header()</a></span> qui est un alias de
     <span class="function"><a href="function.imap-headerinfo.php" class="function">imap_headerinfo()</a></span> a été supprimée.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.intl">
  <h3 class="title">Fonctions d&#039;internationalisation</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     La constante obsolète <strong><code><a href="intl.constants.php#constant.intl-idna-variant-2003">INTL_IDNA_VARIANT_2003</a></code></strong> a été supprimée.
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La constante obsolète <strong><code>Normalizer::NONE</code></strong> a été supprimée.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.ldap">
  <h3 class="title">LDAP</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Les fonctions <span class="function"><a href="function.ldap-sort.php" class="function">ldap_sort()</a></span>,
     <span class="function"><a href="function.ldap-control-paged-result.php" class="function">ldap_control_paged_result()</a></span> et
     <span class="function"><a href="function.ldap-control-paged-result-response.php" class="function">ldap_control_paged_result_response()</a></span> ont été supprimées.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;interface de <span class="function"><a href="function.ldap-set-rebind-proc.php" class="function">ldap_set_rebind_proc()</a></span> a changé ; le paramètre
     <code class="parameter">callback</code> n&#039;accepte plus les chaînes vides ; <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> doit être utilisé
     à la place.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.mbstring">
  <h3 class="title">MBString</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     La directive <a href="mbstring.configuration.php#ini.mbstring.func-overload" class="link">mbstring.func_overload</a> a été
     supprimée. Les constantes <strong><code><a href="mbstring.constants.php#constant.mb-overload-mail">MB_OVERLOAD_MAIL</a></code></strong>,
     <strong><code><a href="mbstring.constants.php#constant.mb-overload-string">MB_OVERLOAD_STRING</a></code></strong>, et <strong><code><a href="mbstring.constants.php#constant.mb-overload-regex">MB_OVERLOAD_REGEX</a></code></strong>
     ont également été supprimées. Enfin, les entrées <code class="literal">&quot;func_overload&quot;</code> et
     <code class="literal">&quot;func_overload_list&quot;</code> dans <span class="function"><a href="function.mb-get-info.php" class="function">mb_get_info()</a></span> ont été
     supprimées.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-parse-str.php" class="function">mb_parse_str()</a></span> ne peut plus être utilisée sans spécifier un tableau de résultats.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Un certain nombre d&#039;alias mbregex obsolètes ont été supprimés. Voir la liste suivante
     pour savoir quelles fonctions doivent être utilisées à la place :
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><span class="function"><strong>mbregex_encoding()</strong></span> → <span class="function"><a href="function.mb-regex-encoding.php" class="function">mb_regex_encoding()</a></span></li>
      <li><span class="function"><strong>mbereg()</strong></span> → <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span></li>
      <li><span class="function"><strong>mberegi()</strong></span> → <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span></li>
      <li><span class="function"><strong>mbereg_replace()</strong></span> → <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span></li>
      <li><span class="function"><strong>mberegi_replace()</strong></span> → <span class="function"><a href="function.mb-eregi-replace.php" class="function">mb_eregi_replace()</a></span></li>
      <li><span class="function"><strong>mbsplit()</strong></span> → <span class="function"><a href="function.mb-split.php" class="function">mb_split()</a></span></li>
      <li><span class="function"><strong>mbereg_match()</strong></span> → <span class="function"><a href="function.mb-ereg-match.php" class="function">mb_ereg_match()</a></span></li>
      <li><span class="function"><strong>mbereg_search()</strong></span> → <span class="function"><a href="function.mb-ereg-search.php" class="function">mb_ereg_search()</a></span></li>
      <li><span class="function"><strong>mbereg_search_pos()</strong></span> → <span class="function"><a href="function.mb-ereg-search-pos.php" class="function">mb_ereg_search_pos()</a></span></li>
      <li><span class="function"><strong>mbereg_search_regs()</strong></span> → <span class="function"><a href="function.mb-ereg-search-regs.php" class="function">mb_ereg_search_regs()</a></span></li>
      <li><span class="function"><strong>mbereg_search_init()</strong></span> → <span class="function"><a href="function.mb-ereg-search-init.php" class="function">mb_ereg_search_init()</a></span></li>
      <li><span class="function"><strong>mbereg_search_getregs()</strong></span> → <span class="function"><a href="function.mb-ereg-search-getregs.php" class="function">mb_ereg_search_getregs()</a></span></li>
      <li><span class="function"><strong>mbereg_search_getpos()</strong></span> → <span class="function"><a href="function.mb-ereg-search-getpos.php" class="function">mb_ereg_search_getpos()</a></span></li>
      <li><span class="function"><strong>mbereg_search_setpos()</strong></span> → <span class="function"><a href="function.mb-ereg-search-setpos.php" class="function">mb_ereg_search_setpos()</a></span></li>
     </ul>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Le modificateur <code class="literal">e</code> pour <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span> a été supprimé.
     <span class="function"><a href="function.mb-ereg-replace-callback.php" class="function">mb_ereg_replace_callback()</a></span> doit être utilisé à la place.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Un argument de motif autre qu&#039;une chaîne de caractères à <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span> sera désormais interprété comme
     une chaîne de caractères au lieu d&#039;un point de code ASCII. Le comportement précédent peut être restauré avec un appel
     explicite à <span class="function"><a href="function.chr.php" class="function">chr()</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;argument <code class="parameter">needle</code> pour <span class="function"><a href="function.mb-strpos.php" class="function">mb_strpos()</a></span>,
     <span class="function"><a href="function.mb-strrpos.php" class="function">mb_strrpos()</a></span>, <span class="function"><a href="function.mb-stripos.php" class="function">mb_stripos()</a></span>,
     <span class="function"><a href="function.mb-strripos.php" class="function">mb_strripos()</a></span>, <span class="function"><a href="function.mb-strstr.php" class="function">mb_strstr()</a></span>,
     <span class="function"><a href="function.mb-stristr.php" class="function">mb_stristr()</a></span>, <span class="function"><a href="function.mb-strrchr.php" class="function">mb_strrchr()</a></span> et
     <span class="function"><a href="function.mb-strrichr.php" class="function">mb_strrichr()</a></span> peut désormais être vide.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Le paramètre <code class="parameter">is_hex</code>, qui n&#039;était pas utilisé en interne, a été supprimé de
     <span class="function"><a href="function.mb-decode-numericentity.php" class="function">mb_decode_numericentity()</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;ancien comportement consistant à passer l&#039;encodage comme troisième argument au lieu d&#039;un offset pour la fonction
     <span class="function"><a href="function.mb-strrpos.php" class="function">mb_strrpos()</a></span> a été supprimé ; un index explicite de <code class="literal">0</code>
     avec l&#039;encodage doit être fourni comme quatrième argument.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les alias de codage de caractères <code class="literal">ISO_8859-*</code> ont été remplacés par
     <code class="literal">ISO8859-*</code> pour une meilleure interopérabilité avec l&#039;extension iconv. Les alias
     mbregex ISO 8859 avec des traits de soulignement (<code class="literal">ISO_8859_*</code> et
     <code class="literal">ISO8859_*</code>) ont également été supprimés.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> et <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> retourneront désormais le booléen <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
     en cas de correspondance réussie. Auparavant, elles retournaient l&#039;entier <code class="literal">1</code> si
     <code class="parameter">matches</code> n&#039;était pas passé, ou <code class="code">max(1, strlen($matches[0]))</code> si
     <code class="parameter">matches</code> était passé.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.oci8">
  <h3 class="title">OCI8</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     La classe <span class="classname"><strong class="classname">OCI-Lob</strong></span> s&#039;appelle désormais <span class="classname"><a href="class.ocilob.php" class="classname">OCILob</a></span>, et la classe
     <span class="classname"><strong class="classname">OCI-Collection</strong></span> s&#039;appelle maintenant <span class="classname"><a href="class.ocicollection.php" class="classname">OCICollection</a></span>
     pour la conformité des noms avec l&#039;outil d&#039;annotation de type arginfo de PHP 8.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Plusieurs fonctions alias ont été marquées comme obsolètes.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.oci-internal-debug.php" class="function">oci_internal_debug()</a></span> et son alias <span class="function"><a href="function.ociinternaldebug.php" class="function">ociinternaldebug()</a></span>
     ont été supprimés.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.odbc">
  <h3 class="title">ODBC</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
    <span class="function"><a href="function.odbc-connect.php" class="function">odbc_connect()</a></span> ne réutilise plus les connexions.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Le paramètre inutilisé <code class="parameter">flags</code> de <span class="function"><a href="function.odbc-exec.php" class="function">odbc_exec()</a></span> a été
     supprimé.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.openssl">
  <h3 class="title">OpenSSL</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.openssl-seal.php" class="function">openssl_seal()</a></span> et <span class="function"><a href="function.openssl-open.php" class="function">openssl_open()</a></span> requièrent désormais le paramètre
     <code class="parameter">method</code> car l&#039;ancienne valeur par défaut <code class="literal">&quot;RC4&quot;</code>
     est considérée comme peu sûre.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.pcre">
  <h3 class="title">Expressions régulières (compatibles avec Perl)</h3>

  <p class="para">
   Lorsque des séquences d&#039;échappement invalides sont passées, elles ne sont plus interprétées comme des littéraux. Ce comportement
   nécessitait auparavant le modificateur <code class="literal">X</code> qui est maintenant ignoré.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.pdo">
  <h3 class="title">Objets de données PHP (PDO)</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Le mode de gestion des erreurs par défaut a été changé de &quot;silencieux&quot; à &quot;exceptions&quot;. Voir
     <a href="pdo.error-handling.php" class="link">Erreurs et gestion des erreurs</a> pour plus de détails.
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les signatures de certaines méthodes PDO ont changé :
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">PDO::query(string $query, ?int $fetchMode  = null, mixed  ...$fetchModeArgs)</code></li>
      <li><code class="code">PDOStatement::setFetchMode(int $mode, mixed ...$args)</code></li>
     </ul>
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.pdo-odbc">
  <h3 class="title">PDO ODBC</h3>

  <p class="para">
   La directive <var class="filename">php.ini</var>
   <a href="ref.pdo-odbc.php#ini.pdo-odbc.db2-instance-name" class="link">pdo_odbc.db2_instance_name</a> a été
   supprimée.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.pdo-mysql">
  <h3 class="title">PDO MySQL</h3>

  <p class="para">
   <span class="methodname"><a href="pdo.intransaction.php" class="methodname">PDO::inTransaction()</a></span> indique désormais l&#039;état réel de la transaction de
   la connexion, plutôt qu&#039;une approximation maintenue par PDO. Si une requête
   soumise à un &quot;commit implicite&quot; est exécutée, <span class="methodname"><a href="pdo.intransaction.php" class="methodname">PDO::inTransaction()</a></span>
   retournera par la suite <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, car la transaction n&#039;est plus active.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.pgsql">
  <h3 class="title">PostgreSQL</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     La syntaxe obsolète <span class="function"><a href="function.pg-connect.php" class="function">pg_connect()</a></span> utilisant plusieurs paramètres au lieu d&#039;une chaîne de connexion
     n&#039;est plus supportée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La signature <span class="function"><a href="function.pg-lo-import.php" class="function">pg_lo_import()</a></span> et <span class="function"><a href="function.pg-lo-export.php" class="function">pg_lo_export()</a></span> 
     qui transmet la connexion comme dernier argument n&#039;est plus supportée. La connexion doit être passée
     comme premier argument à la place.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.pg-fetch-all.php" class="function">pg_fetch_all()</a></span> retourne maintenant un tableau vide au lieu de <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> pour les jeux de résultats
     avec zéro ligne.
    </p>
   </li>
  </ul>
 </div>

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

  <p class="para">
   Les métadonnées associées à un phar ne seront plus automatiquement désérialisées, afin de corriger 
   des vulnérabilités de sécurité potentielles dues à l&#039;instanciation d&#039;objets, à l&#039;autoloading, etc.
  
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.reflection">
  <h3 class="title">Reflection</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Les signatures de méthodes
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">ReflectionClass::newInstance($args)</code></li>
      <li><code class="code">ReflectionFunction::invoke($args)</code></li>
      <li><code class="code">ReflectionMethod::invoke($object, $args)</code></li>
     </ul>
    </p>
    <p class="para">
     ont été remplacées par :
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">ReflectionClass::newInstance(...$args)</code></li>
      <li><code class="code">ReflectionFunction::invoke(...$args)</code></li>
      <li><code class="code">ReflectionMethod::invoke($object, ...$args)</code></li>
     </ul>
    </p>
    <p class="para">
     Le code qui doit être compatible avec PHP 7 et PHP 8 peut utiliser les signatures
     suivantes pour être compatible avec les deux versions :
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">ReflectionClass::newInstance($arg = null, ...$args)</code></li>
      <li><code class="code">ReflectionFunction::invoke($arg = null, ...$args)</code></li>
      <li><code class="code">ReflectionMethod::invoke($object, $arg = null, ...$args)</code></li>
     </ul>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La méthode <span class="methodname"><a href="reflectiontype.tostring.php" class="methodname">ReflectionType::__toString()</a></span> retourne maintenant une représentation complète de débogage
     du type, et n&#039;est plus dépréciée. En particulier, le résultat inclura un
     indicateur de nullité pour les types nullables. Le format de la valeur retournée n&#039;est pas stable et peut
     changer d&#039;une version de PHP à l&#039;autre.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les méthodes de réflexion export() ont été supprimées.
     À la place, les objets de réflexion peuvent être transformés en chaînes de caractères.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="reflectionmethod.isconstructor.php" class="methodname">ReflectionMethod::isConstructor()</a></span> et
     <span class="methodname"><a href="reflectionmethod.isdestructor.php" class="methodname">ReflectionMethod::isDestructor()</a></span> retournent désormais également <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> pour les méthodes
     <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> et
     <a href="language.oop5.decon.php#object.destruct" class="link">__destruct()</a> des interfaces.
     Auparavant, ce n&#039;était le cas que pour les méthodes des classes et des traits.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La méthode <span class="methodname"><strong>ReflectionType::isBuiltin()</strong></span> a été déplacée vers
     <span class="classname"><a href="class.reflectionnamedtype.php" class="classname">ReflectionNamedType</a></span>. <span class="classname"><a href="class.reflectionuniontype.php" class="classname">ReflectionUnionType</a></span> n&#039;a
     pas cette méthode.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.sockets">
  <h3 class="title">Sockets</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Les drapeaux obsolètes <strong><code>AI_IDN_ALLOW_UNASSIGNED</code></strong> et
     <strong><code>AI_IDN_USE_STD3_ASCII_RULES</code></strong> <code class="parameter">flags</code> pour
     <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span> ont été supprimés.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.spl">
  <h3 class="title">Bibliothèque standard de PHP (SPL)</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="splfileobject.fgetss.php" class="methodname">SplFileObject::fgetss()</a></span> a été supprimée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="splfileobject.seek.php" class="methodname">SplFileObject::seek()</a></span> cherche maintenant toujours le début de la ligne.
     Auparavant, les positions <code class="literal">&gt;=1</code> recherchaient le début de la ligne suivante.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="splheap.compare.php" class="methodname">SplHeap::compare()</a></span> spécifie désormais une signature de méthode. Les classes héritées
     implémentant cette méthode devront désormais utiliser une signature de méthode compatible.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="spldoublylinkedlist.push.php" class="methodname">SplDoublyLinkedList::push()</a></span>,
     <span class="methodname"><a href="spldoublylinkedlist.unshift.php" class="methodname">SplDoublyLinkedList::unshift()</a></span> et
     <span class="methodname"><a href="splqueue.enqueue.php" class="methodname">SplQueue::enqueue()</a></span> retournent désormais <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> au lieu de <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> lancera désormais toujours une
     <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> en cas d&#039;arguments invalides, donc le second argument
     <code class="parameter">do_throw</code> est ignoré et une notification sera émise s&#039;il est défini à <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="classname"><a href="class.splfixedarray.php" class="classname">SplFixedArray</a></span> est maintenant un <span class="interfacename"><a href="class.iteratoraggregate.php" class="interfacename">IteratorAggregate</a></span>
     et non plus un <span class="interfacename"><a href="class.iterator.php" class="interfacename">Iterator</a></span>.
     <span class="methodname"><a href="splfixedarray.rewind.php" class="methodname">SplFixedArray::rewind()</a></span>, <span class="methodname"><a href="splfixedarray.current.php" class="methodname">SplFixedArray::current()</a></span>,
     <span class="methodname"><a href="splfixedarray.key.php" class="methodname">SplFixedArray::key()</a></span>, <span class="methodname"><a href="splfixedarray.next.php" class="methodname">SplFixedArray::next()</a></span>, et
     <span class="methodname"><a href="splfixedarray.valid.php" class="methodname">SplFixedArray::valid()</a></span> ont été supprimées. À leur place,
     <span class="methodname"><a href="splfixedarray.getiterator.php" class="methodname">SplFixedArray::getIterator()</a></span> a été ajoutée. Tout code qui utilise l&#039;itération explicite
     sur SplFixedArray doit maintenant obtenir une valeur de
     <span class="interfacename"><a href="class.iterator.php" class="interfacename">Iterator</a></span> à travers
     <span class="methodname"><a href="splfixedarray.getiterator.php" class="methodname">SplFixedArray::getIterator()</a></span>. Cela signifie que
     <span class="classname"><a href="class.splfixedarray.php" class="classname">SplFixedArray</a></span> peut désormais être utilisé en toute sécurité dans les boucles imbriquées.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.standard">
  <h3 class="title">Bibliothèque standard</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.assert.php" class="function">assert()</a></span> n&#039;évalue plus les arguments de type <a href="language.types.string.php" class="link">chaîne de caractères</a>, ils sont traités
     comme n&#039;importe quel autre argument. <code class="code">assert($a == $b)</code> doit être utilisé à la place de
     <code class="code">assert(&#039;$a == $b&#039;)</code>. La directive ini <a href="info.configuration.php#ini.assert.quiet-eval" class="link">assert.quiet_eval</a> et la constante
     <strong><code><a href="info.constants.php#constant.assert-quiet-eval">ASSERT_QUIET_EVAL</a></code></strong> ont également été supprimées, car elles n&#039;auraient plus d&#039;effet.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.parse-str.php" class="function">parse_str()</a></span> ne peut plus être utilisé sans spécifier un tableau de résultats.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Le filtre <a href="filters.string.php#filters.string.strip_tags" class="link">string.strip_tags</a> a été supprimé.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;argument <code class="parameter">needle</code> de <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>,
     <span class="function"><a href="function.strrpos.php" class="function">strrpos()</a></span>, <span class="function"><a href="function.stripos.php" class="function">stripos()</a></span>, <span class="function"><a href="function.strripos.php" class="function">strripos()</a></span>,
     <span class="function"><a href="function.strstr.php" class="function">strstr()</a></span>, <span class="function"><a href="function.strchr.php" class="function">strchr()</a></span>, <span class="function"><a href="function.strrchr.php" class="function">strrchr()</a></span>, et
     <span class="function"><a href="function.stristr.php" class="function">stristr()</a></span> sera désormais toujours interprété comme une chaîne de caractères. Auparavant, les <code class="parameter">needle</code>
     étaient interprétés comme des points de code ASCII. Un appel explicite à <span class="function"><a href="function.chr.php" class="function">chr()</a></span> peut
     être utilisé pour rétablir le comportement précédent.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;argument <code class="parameter">needle</code> pour <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>,
      <span class="function"><a href="function.strrpos.php" class="function">strrpos()</a></span>, <span class="function"><a href="function.stripos.php" class="function">stripos()</a></span>, <span class="function"><a href="function.strripos.php" class="function">strripos()</a></span>,
     <span class="function"><a href="function.strstr.php" class="function">strstr()</a></span>, <span class="function"><a href="function.stristr.php" class="function">stristr()</a></span> et <span class="function"><a href="function.strrchr.php" class="function">strrchr()</a></span> peut
     désormais être vide.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;argument <code class="parameter">length</code> pour <span class="function"><a href="function.substr.php" class="function">substr()</a></span>,
     <span class="function"><a href="function.substr-count.php" class="function">substr_count()</a></span>, <span class="function"><a href="function.substr-compare.php" class="function">substr_compare()</a></span> et
     <span class="function"><a href="function.iconv-substr.php" class="function">iconv_substr()</a></span> peut désormais être <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>. Les valeurs <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> se comporteront
     comme si aucun argument de longueur n&#039;avait été fourni et retourneront donc le reste de la chaîne de caractères
     au lieu d&#039;une chaîne vide.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;argument <code class="parameter">length</code> pour <span class="function"><a href="function.array-splice.php" class="function">array_splice()</a></span> peut maintenant être
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>. Les valeurs <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> se comporteront de la même manière que si l&#039;on omettait l&#039;argument, c&#039;est-à-dire qu&#039;elles supprimeront
     tout ce qui se trouve de l&#039;<code class="parameter">offset</code> à la fin du tableau.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;argument <code class="parameter">args</code> de <span class="function"><a href="function.vsprintf.php" class="function">vsprintf()</a></span>,
     <span class="function"><a href="function.vfprintf.php" class="function">vfprintf()</a></span>, et <span class="function"><a href="function.vprintf.php" class="function">vprintf()</a></span> doit maintenant être un tableau. Auparavant
     n&#039;importe quel type était accepté.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;option <code class="literal">&#039;salt&#039;</code> de <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> n&#039;est plus supportée.
     Si l&#039;option <code class="literal">&#039;salt&#039;</code> est utilisée, un avertissement est généré, le salt fourni est ignoré et 
     un salt généré est utilisé à la place.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La fonction <span class="function"><a href="function.quotemeta.php" class="function">quotemeta()</a></span> retourne désormais une chaîne vide si une chaîne vide
     a été passée. Auparavant, elle retournait <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les fonctions suivantes ont été supprimées :
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><span class="function"><a href="function.hebrevc.php" class="function">hebrevc()</a></span></li>
      <li><span class="function"><a href="function.convert-cyr-string.php" class="function">convert_cyr_string()</a></span></li>
      <li><span class="function"><a href="function.money-format.php" class="function">money_format()</a></span></li>
      <li><span class="function"><a href="function.ezmlm-hash.php" class="function">ezmlm_hash()</a></span></li>
      <li><span class="function"><a href="function.restore-include-path.php" class="function">restore_include_path()</a></span></li>
      <li><span class="function"><a href="function.get-magic-quotes-gpc.php" class="function">get_magic_quotes_gpc()</a></span></li>
      <li><span class="function"><a href="function.get-magic-quotes-runtime.php" class="function">get_magic_quotes_runtime()</a></span></li>
      <li><span class="function"><a href="function.fgetss.php" class="function">fgetss()</a></span></li>
     </ul>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="filter.constants.php#constant.filter-sanitize-magic-quotes">FILTER_SANITIZE_MAGIC_QUOTES</a></code></strong> a été supprimée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;appel à <span class="function"><a href="function.implode.php" class="function">implode()</a></span> avec des paramètres dans l&#039;ordre inverse <code class="code">($pieces,
     $glue)</code> n&#039;est plus supporté.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.parse-url.php" class="function">parse_url()</a></span> distingue désormais les requêtes et les fragments absents ou vides :
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">http://example.com/foo → query = null, fragment = null</code></li>
      <li><code class="code">http://example.com/foo? → query = &quot;&quot;,   fragment = null</code></li>
      <li><code class="code">http://example.com/foo# → query = null, fragment = &quot;&quot;</code></li>
      <li><code class="code">http://example.com/foo?# → query = &quot;&quot;,   fragment = &quot;&quot;</code></li>
     </ul>
      Auparavant, dans tous les cas, la requête et le fragment étaient des <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span> et <span class="function"><a href="function.debug-zval-dump.php" class="function">debug_zval_dump()</a></span> imprimeront maintenant
     les nombres à virgule flottante en utilisant <a href="ini.core.php#ini.serialize-precision" class="link">serialize_precision</a>
     plutôt que la <a href="ini.core.php#ini.precision" class="link">précision</a>. Dans une configuration par défaut, cela
     signifie que les nombres à virgule flottante sont désormais imprimés avec une précision totale par ces
     fonctions de débogage.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Si le tableau retourné par <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> contient des propriétés inexistantes, 
     celles-ci sont désormais ignorées de manière silencieuse. Auparavant, de telles propriétés auraient été
     sérialisées comme si elles avaient la valeur <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La locale par défaut au démarrage est désormais toujours <code class="literal">&quot;C&quot;</code>. Aucune locale n&#039;est héritée
     de l&#039;environnement par défaut. Auparavant, <strong><code><a href="string.constants.php#constant.lc-all">LC_ALL</a></code></strong> était réglé sur
     <code class="literal">&quot;C&quot;</code>, tandis que <strong><code><a href="string.constants.php#constant.lc-ctype">LC_CTYPE</a></code></strong> était hérité de l&#039;environnement.
     Cependant, certaines fonctions ne respectaient pas les paramètres linguistiques hérités sans un appel explicite à
     <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>. Un appel explicite à <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span> est désormais
     toujours nécessaire si un composant de locale doit être modifié par rapport à la valeur par défaut.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     La solution de repli DES dans <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span> a été supprimée. Si un format de salt
     inconnu est passé à <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span>, la fonction échouera avec <code class="literal">*0</code>
     au lieu de se rabattre sur un hachage DES faible.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Spécifier des rounds hors plage pour SHA256/SHA512 <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span> échouera maintenant avec
     <code class="literal">*0</code> au lieu de se caler sur la limite la plus proche. Cela correspond au comportement de la glibc.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Le résultat des fonctions de tri peut avoir changé, si le tableau contient des éléments qui se comparent comme étant
     égaux.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Toutes les fonctions acceptant des fonctions de rappels qui ne sont pas explicitement spécifiées pour accepter des paramètres
     par référence seront désormais averties si une fonction de rappel avec des paramètres par référence est utilisée. Les exemples incluent
     <span class="function"><a href="function.array-filter.php" class="function">array_filter()</a></span> et <span class="function"><a href="function.array-reduce.php" class="function">array_reduce()</a></span>. C&#039;était déjà le cas
     pour la plupart des fonctions, mais pas toutes.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;enveloppe de flux HTTP utilisée par des fonctions telles que <span class="function"><a href="function.file-get-contents.php" class="function">file_get_contents()</a></span>
     annonce désormais HTTP/1.1 au lieu de HTTP/1.0 par défaut. Cela ne modifie pas le comportement du client
     mais les serveurs peuvent réagir différemment. Pour conserver l&#039;ancien comportement, définissez
     l&#039;option de contexte de flux <code class="literal">&#039;protocol_version&#039;</code>, par exemple
    </p>
    <p class="para">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$ctx </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">([</span><span style="color: #DD0000">'http' </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'protocol_version' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'1.0'</span><span style="color: #007700">]]);<br />echo </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://example.org'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </p>
   </li>
   <li class="listitem">
    <p class="para">
     L&#039;appel à <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span> sans salt explicite n&#039;est plus supporté. Pour
     produire un hachage fort avec un salt auto-généré, il convient d&#039;utiliser
     <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> à la place.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.substr.php" class="function">substr()</a></span>, <span class="function"><a href="function.mb-substr.php" class="function">mb_substr()</a></span>, <span class="function"><a href="function.iconv-substr.php" class="function">iconv_substr()</a></span> et
     <span class="function"><a href="function.grapheme-substr.php" class="function">grapheme_substr()</a></span> fixent désormais de manière cohérente les index hors limites
     à la limite de la chaîne de caractères. Auparavant, <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> était retourné au lieu de la chaîne vide dans certains cas.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Sous Windows, les fonctions d&#039;exécution de programmes (<span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span>, <span class="function"><a href="function.exec.php" class="function">exec()</a></span>,
     <span class="function"><a href="function.popen.php" class="function">popen()</a></span> etc.) utilisant l&#039;interpréteur de commandes, exécutent désormais systématiquement <strong class="command">%comspec% /s
     /c &quot;$commandline&quot;</strong>, ce qui a le même effet que l&#039;exécution de
     <strong class="command">$commandline</strong> (sans les guillemets supplémentaires).
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.sysvsem">
  <h3 class="title">Sysvsem</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Le paramètre <code class="parameter">auto_release</code> de <span class="function"><a href="function.sem-get.php" class="function">sem_get()</a></span> a été modifié pour
     accepter les valeurs <a href="language.types.boolean.php" class="link">booléen</a> au lieu de <a href="language.types.integer.php" class="link">entier</a>.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.tidy">
  <h3 class="title">Tidy</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Le paramètre <code class="parameter">use_include_path</code>, qui n&#039;était pas utilisé en interne, a été
     supprimé de <span class="function"><a href="tidy.repairstring.php" class="function">tidy_repair_string()</a></span>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="tidy.repairstring.php" class="methodname">tidy::repairString()</a></span> et <span class="methodname"><a href="tidy.repairfile.php" class="methodname">tidy::repairFile()</a></span> sont devenues des
     méthodes statiques.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.tokenizer">
  <h3 class="title">Tokenizer</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Les tokens <strong><code><a href="tokens.php#constant.t-comment">T_COMMENT</a></code></strong> n&#039;incluront plus de nouvelle ligne à la fin. La nouvelle ligne fera
     partie d&#039;un jeton <strong><code><a href="tokens.php#constant.t-whitespace">T_WHITESPACE</a></code></strong> suivant. Il convient de noter que
     <strong><code><a href="tokens.php#constant.t-comment">T_COMMENT</a></code></strong> n&#039;est pas toujours suivi d&#039;un espace blanc, il peut également être suivi de
     <strong><code><a href="tokens.php#constant.t-close-tag">T_CLOSE_TAG</a></code></strong> ou d&#039;une fin de fichier.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Les noms à espace de nommage sont désormais représentés à l&#039;aide des attributs <strong><code><a href="tokens.php#constant.t-name-qualified">T_NAME_QUALIFIED</a></code></strong>
     (<code class="code">Foo\Bar</code>), <strong><code><a href="tokens.php#constant.t-name-fully-qualified">T_NAME_FULLY_QUALIFIED</a></code></strong> (<code class="code">\Foo\Bar</code>) et
     <strong><code><a href="tokens.php#constant.t-name-relative">T_NAME_RELATIVE</a></code></strong> (<code class="code">namespace\Foo\Bar</code>).
     <strong><code><a href="tokens.php#constant.t-ns-separator">T_NS_SEPARATOR</a></code></strong> n&#039;est utilisé que pour les séparateurs d&#039;espace de noms autonomes, et n&#039;est syntaxiquement 
     valide qu&#039;en conjonction avec les déclarations d&#039;utilisation de groupe.
    
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.xmlreader">
  <h3 class="title">XMLReader</h3>

  <p class="para">
   <span class="methodname"><a href="xmlreader.open.php" class="methodname">XMLReader::open()</a></span> et <span class="methodname"><a href="xmlreader.xml.php" class="methodname">XMLReader::XML()</a></span> sont désormais des
   méthodes statiques. Elles peuvent toujours être appelées en tant que méthodes d&#039;instance, mais les classes
   qui en héritent doivent les déclarer comme statiques si elles surchargent ces méthodes.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.xmlrpc">
  <h3 class="title">XML-RPC</h3>

  <p class="para">
   L&#039;extension XML-RPC a été déplacée vers PECL et ne fait plus partie de la distribution de PHP.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.zip">
  <h3 class="title">Zip</h3>

  <p class="para">
   <strong><code>ZipArchive::OPSYS_Z_CPM</code></strong> a été supprimée (ce nom était une erreur de frappe). Il convient d&#039;utiliser
   <strong><code><a href="zip.constants.php#ziparchive.constants.opsys-cpm">ZipArchive::OPSYS_CPM</a></code></strong> à la place.
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.zlib">
  <h3 class="title">Zlib</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.gzgetss.php" class="function">gzgetss()</a></span> a été supprimée.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <a href="zlib.configuration.php#ini.zlib.output-compression" class="link">zlib.output_compression</a> n&#039;est plus
     automatiquement désactivée pour <code class="literal">Content-Type: image/*</code>.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.php-test-packs">
  <h3 class="title">Packs de test PHP pour Windows</h3>

  <p class="para">
   Le programme de test a été renommé de <var class="filename">run-test.php</var> à
   <var class="filename">run-tests.php</var>, pour correspondre à son nom dans php-src.
  </p>
 </div>
</div><?php manual_footer($setup); ?>