<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration71.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'migration71.incompatible.php',
    1 => 'Modifications entra&icirc;nant une incompatibilit&eacute; ascendante',
    2 => 'Modifications entra&icirc;nant une incompatibilit&eacute; ascendante',
  ),
  'up' => 
  array (
    0 => 'migration71.php',
    1 => 'Migration de PHP 7.0.x vers PHP 7.1.x',
  ),
  'prev' => 
  array (
    0 => 'migration71.constants.php',
    1 => 'Nouvelles constantes globales',
  ),
  'next' => 
  array (
    0 => 'migration71.deprecated.php',
    1 => 'Les fonctionnalit&eacute;s d&eacute;pr&eacute;ci&eacute;es dans PHP 7.1.x',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'appendices/migration71/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

 <div class="sect2" id="migration71.incompatible.too-few-arguments-exception">
  <h3 class="title">Exception en passant trop peu d&#039;arguments de fonction</h3>

  <p class="para">
   Auparavant, un avertissement était émis pour invoquer des fonctions définies 
   par l&#039;utilisateur avec trop peu d&#039;arguments. Maintenant, cet avertissement a 
   été promu en une exception d&#039;erreur. Cette modification s&#039;applique uniquement 
   aux fonctions définies par l&#039;utilisateur, et non aux fonctions internes. 
   Par exemple:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">){}<br /></span><span style="color: #0000BB">test</span><span style="color: #007700">();</span></span></code></div>
   </div>

   <p class="para">Résultat de l&#039;exemple ci-dessus est similaire à :</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in %s on line %d and exactly 1 expected in %s:%d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.forbid-dynamic-calls-to-scope-introspection-functions">
  <h3 class="title">Interdire les appels dynamiques aux fonctions d&#039;introspection de portée</h3>

  <p class="para">
   Les appels dynamiques pour certaines fonctions ont été interdits (sous la forme 
   de <code class="literal">$func()</code> ou <code class="literal">array_map(&#039;extract&#039;, ...)</code>, 
   etc.). Ces fonctions inspectent ou modifient une autre étendue, et présentent 
   avec eux un comportement ambigu et non fiable. Les fonctions sont les suivantes:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.assert.php" class="function">assert()</a></span> - avec une chaîne comme premier argument
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.compact.php" class="function">compact()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.extract.php" class="function">extract()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-arg.php" class="function">func_get_arg()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.get-defined-vars.php" class="function">get_defined_vars()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.mb-parse-str.php" class="function">mb_parse_str()</a></span> - avec un argument
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.parse-str.php" class="function">parse_str()</a></span> - avec un argument
    </span>
   </li>
  </ul>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">(function () {<br />    </span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'func_num_args'</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$func</span><span style="color: #007700">();<br />})();</span></span></code></div>
   </div>

   <p class="para">L&#039;exemple ci-dessus va afficher :</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Warning: Cannot call func_num_args() dynamically in %s on line %d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.invalid-class-names">
  <h3 class="title">Nom de classe, interface, et trait invalides</h3>

  <p class="para">
   Les noms suivants ne peuvent pas être utilisés pour nommer des classes, 
   des interfaces ou des traits:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara"><span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span></span>
   </li>
   <li class="listitem">
    <span class="simpara"><span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span></span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.numerical-strings-scientific-notation">
  <h3 class="title">Les conversions de chaînes numériques respectent désormais la notation scientifique</h3>

  <p class="para">
   Les opérations entières et les conversions sur les chaînes numériques respectent 
   désormais la notation scientifique. Cela inclut également l&#039;opération de 
   cast <code class="literal">(int)</code> et les fonctions suivantes: 
   <span class="function"><a href="function.intval.php" class="function">intval()</a></span> (où la base est 10), <span class="function"><a href="function.settype.php" class="function">settype()</a></span>, 
   <span class="function"><a href="function.decbin.php" class="function">decbin()</a></span>, <span class="function"><a href="function.decoct.php" class="function">decoct()</a></span> et 
   <span class="function"><a href="function.dechex.php" class="function">dechex()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fixes-to-mt_rand-algorithm">
  <h3 class="title">Correctifs à l&#039;algorithme <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span></h3>

  <p class="para">
   <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> utilise désormais par défaut la version fixe de
   l&#039;algorithme Mersenne Twister. Si la sortie déterministe de
   <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> a été invoquée, alors <strong><code><a href="random.constants.php#constant.mt-rand-php">MT_RAND_PHP</a></code></strong> peut être utilisé comme
   second paramètre optionnel de <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> pour préserver l&#039;ancienne (et incorrecte) implémentation.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.rand-srand-aliases">
  <h3 class="title">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> alias de <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> et 
   <span class="function"><a href="function.srand.php" class="function">srand()</a></span> alias de <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>
  </h3>

  <p class="para">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> et <span class="function"><a href="function.srand.php" class="function">srand()</a></span> sont désormais
   des alias de <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> et <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>, 
   respectivement. Cela signifie que la sortie pour les fonctions suivantes a
   été modifiée : <span class="function"><a href="function.rand.php" class="function">rand()</a></span>, <span class="function"><a href="function.shuffle.php" class="function">shuffle()</a></span>, 
   <span class="function"><a href="function.str-shuffle.php" class="function">str_shuffle()</a></span> et <span class="function"><a href="function.array-rand.php" class="function">array_rand()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.delete-control-character-in-identifiers">
  <h3 class="title">Interdire le caractère de contrôle de suppression ASCII dans les identificateurs</h3>

  <p class="para">
   Le caractère de contrôle de suppression ASCII (<code class="literal">0x7F</code>) ne peut 
   plus être utilisé dans les identificateurs qui ne sont pas entre guillemets.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.error_log-syslog">
  <h3 class="title">
   <code class="parameter">error_log</code> change pour la valeur <code class="literal">syslog</code>
  </h3>

  <p class="para">
   Si le paramètre INI <code class="parameter">error_log</code> est défini sur 
   <code class="literal">syslog</code>, les niveaux d&#039;erreur PHP sont mappés aux niveaux 
   d&#039;erreur syslog. Cela apporte une différenciation plus fine dans les journaux 
   d&#039;erreurs contrairement à l&#039;approche précédente où toutes les erreurs sont 
   enregistrées avec le niveau d&#039;avis uniquement.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.dont-call-destructors">
  <h3 class="title">Les destructeurs ne sont pas appelés sur des objets incomplets</h3>

  <p class="para">
   Les destructeurs ne sont désormais jamais appelés pour les objets qui lèvent 
   une exception pendant l&#039;exécution de leur constructeur. Dans les versions 
   précédentes, ce comportement dépendait de la question de savoir si l&#039;objet 
   était référencé en dehors du constructeur (par exemple par une trace
   d&#039;appels d&#039;exception).
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.call_user_func-with-ref-args">
  <h3 class="title">
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> gestion des arguments de référence
  </h3>

  <p class="para">
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> va maintenant toujours générer un 
   avertissement sur les appels aux fonctions qui attendent des références comme 
   arguments. Auparavant, cela dépendait de la question de savoir si l&#039;appel était 
   entièrement qualifié.
  </p>
  <p class="para">
   En outre, <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> et 
   <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span> n&#039;abandonneront plus l&#039;appel de 
   fonction dans ce cas. L&#039;avertissement  &quot;référence attendue&quot; sera émis, mais 
   l&#039;appel va continuer comme d&#039;habitude.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-index-operator">
  <h3 class="title">
   L&#039;opérateur d&#039;index vide n&#039;est plus pris en charge pour les chaînes
  </h3>

  <p class="para">
   L&#039;application de l&#039;opérateur d&#039;index vide à une chaîne (par exemple 
   <code class="literal">$str[] = $x</code>) lève une erreur fatale au lieu de la 
   convertir silencieusement en tableau.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-modifcation-by-character">
  <h3 class="title">Affectation via l&#039;accès d&#039;index de chaîne sur une chaîne vide</h3>
  <p class="para">
   La modification de chaîne par caractère sur une chaîne vide fonctionne 
   désormais comme pour les chaînes non vides, c&#039;est-à-dire l&#039;écriture dans 
   un décalage hors plage de la chaîne avec des espaces, où les types non 
   entiers sont convertis en entiers, et seul le premier caractère de la chaîne 
   assignée est utilisé. Autrefois, les chaînes vides étaient
   silencieusement traitées comme un tableau vide.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">] = </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <p class="para">Résultat de l&#039;exemple ci-dessus en PHP 7.0 :</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(1) {
  [10]=&gt;
  string(3) &quot;foo&quot;
}
</pre></div>
    </div>
    <p class="para">Résultat de l&#039;exemple ci-dessus en PHP 7.1 :</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;          f&quot;
</pre></div>
    </div>
   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.removed-ini-directives">
  <h3 class="title">Directives ini supprimées</h3>

  <p class="para">
   Les directives ini suivantes ont été supprimées :
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_file</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_length</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_function</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_bits_per_character</code>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.array-order">
  <h3 class="title">
   L&#039;ordonnancement des éléments d&#039;un tableau a changé lorsqu&#039;ils sont créés
   automatiquement pendant les affectations par référence
  </h3>

  <p class="para">
   L&#039;ordre des éléments dans un tableau a changé lorsqu&#039;ils ont été
   créés automatiquement en les référençant dans une assignation par référence.
   Par exemple:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= [];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"a"</span><span style="color: #007700">] =&amp; </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">] = </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">Résultat de l&#039;exemple ci-dessus en PHP 7.0 :</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;a&quot;]=&gt;
  &amp;int(1)
  [&quot;b&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
   <p class="para">Résultat de l&#039;exemple ci-dessus en PHP 7.1 :</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;b&quot;]=&gt;
  &amp;int(1)
  [&quot;a&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.sort-order">
  <h3 class="title">Ordre de tri des éléments égaux</h3>
  <p class="para">
   L&#039;algorithme de tri interne a été amélioré, ce qui peut entraîner un 
   ordre de tri différent des éléments, qui se comparaient comme égaux 
   auparavant.
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Il ne faut pas compter sur l&#039;ordre des éléments qui se comparent comme
    égaux ; il pourrait changer à tout moment.
   </p>
  </p></blockquote>
 </div>

 <div class="sect2" id="migration71.incompatible.e-recoverable">
  <h3 class="title">Message d&#039;erreur pour les erreurs E_RECOVERABLE</h3>
  <p class="para">
   Le message d&#039;erreur pour les erreurs E_RECOVERABLE a été modifié de 
   &quot;Catchable fatal error&quot; à &quot;Recoverable fatal error&quot;.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.unserialize">
  <h3 class="title">Paramètre $options de unserialize()</h3>
  <p class="para">
   L&#039;élément <code class="literal">allowed_classes</code> du paramètre $options de 
   <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> est maintenant strictement typé, c&#039;est-à-dire 
   que si une valeur autre qu&#039;un <a href="language.types.array.php" class="link">tableau</a> ou un <a href="language.types.boolean.php" class="link">booléen</a> est donnée, unserialize() 
   retourne <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> et émet un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.datetime-microseconds">
  <h3 class="title">Le constructeur de DateTime incorpore microsecondes</h3>
  <p class="para">
   <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> et <span class="classname"><a href="class.datetimeimmutable.php" class="classname">DateTimeImmutable</a></span> 
   intègrent désormais correctement les microsecondes lorsqu&#039;elles sont construites 
   à partir de l&#039;heure actuelle, soit explicitement, soit avec une chaîne relative 
   (par exemple <code class="literal">&quot;first day of next month&quot;</code>). Cela signifie que 
   les comparaisons naïves de deux instances nouvellement créées seront désormais 
   plus susceptibles de retourner <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> au lieu de <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>:
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">() == new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fatal-errors-to-error-exceptions">
  <h3 class="title">Conversions des erreurs fatales en exceptions <span class="classname"><a href="class.error.php" class="classname">Error</a></span></h3>
  <p class="para">
   Dans l&#039;extension date, les données de sérialisation invalides pour les classes 
   <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> ou <span class="classname"><a href="class.dateperiod.php" class="classname">DatePeriod</a></span>, ou 
   l&#039;échec de l&#039;initialisation du fuseau horaire à partir de données sérialisées, 
   lèveront désormais une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> à partir de la 
   méthode <span class="methodname"><strong>__wakeup()</strong></span> ou <span class="methodname"><strong>__set_state()</strong></span>, 
   au lieu de se traduire par une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension DBA, les fonctions de modification des données (telles que 
   <span class="function"><a href="function.dba-insert.php" class="function">dba_insert()</a></span>) lèveront désormais une exception 
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de déclencher une erreur fatale capturable 
   si la clé ne contient pas exactement deux éléments.
  </p>

  <p class="para">
   Dans l&#039;extension DOM, les contextes de validation de schéma ou de RelaxNG non 
   valides lèveront désormais une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de 
   résulter en une erreur fatale. De même, la tentative d&#039;inscription d&#039;une 
   classe de nœud qui n&#039;étend pas la classe de base appropriée, ou tente de lire 
   une propriété non valide ou d&#039;écrire dans une propriété en lecture seule, lèvera 
   également une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   Dans l&#039;extension IMAP, les adresses de messagerie plus longues que 16385 octets 
   lèveront une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de se traduire par une 
   erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension Intl, le fait de ne pas appeler le constructeur parent dans une 
   classe qui étend <span class="classname"><a href="class.collator.php" class="classname">Collator</a></span> avant d&#039;appeler les méthodes 
   parentes lèvera maintenant une <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu d&#039;avoir pour 
   résultat une erreur fatale récupérable. En outre, le clonage d&#039;un objet 
   <span class="classname"><a href="class.transliterator.php" class="classname">Transliterator</a></span> lève désormais une exception 
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en cas d&#039;échec du clonage du Transliterator 
   interne au lieu d&#039;une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension LDAP, la fourniture d&#039;un type de modification inconnu à 
   <span class="function"><strong>ldap_batch_modify()</strong></span> lèvera désormais une exception 
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu d&#039;une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension mbstring, les fonctions <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> lèveront désormais une exception 
   <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> si une expression PHP non valide est fournie 
   et que l&#039;option &#039;e&#039; est utilisée.
  </p>

  <p class="para">
   Dans l&#039;extension mcrypt, <span class="function"><a href="function.mcrypt-encrypt.php" class="function">mcrypt_encrypt()</a></span> et 
   <span class="function"><a href="function.mcrypt-decrypt.php" class="function">mcrypt_decrypt()</a></span> lèveront maintenant une exception 
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu d&#039;une erreur fatale si mcrypt ne 
   peut pas être initialisée.
  </p>

  <p class="para">
   Dans l&#039;extension mysqli, la tentative de lecture d&#039;une propriété non valide 
   ou d&#039;écriture dans une propriété en lecture seule lève maintenant une exception 
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de se traduire par une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension Reflection, le fait de ne pas récupérer un objet de réflexion 
   ou de récupérer une propriété d&#039;objet lève maintenant une exception 
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de se traduire par une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension de session, les gestionnaires de session personnalisés qui 
   ne retournent pas de chaînes pour les ID de session lèveront désormais une 
   exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de provoquer une erreur fatale 
   lorsqu&#039;une fonction est appelée pour générer un ID de session.
  </p>

  <p class="para">
   Dans l&#039;extension SimpleXML, la création d&#039;un attribut sans nom ou dupliqué va 
   maintenant lever une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de générer 
   une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension SPL, une tentative de clonage d&#039;un objet 
   <span class="classname"><strong class="classname">SplDirectory</strong></span> va maintenant lever une exception 
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de générer une erreur fatale.
   De même, appeler <span class="methodname"><a href="arrayiterator.append.php" class="methodname">ArrayIterator::append()</a></span> 
   lors de l&#039;itération sur un objet lèvera également une exception
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   Dans l&#039;extension standard, la fonction <span class="function"><a href="function.assert.php" class="function">assert()</a></span>, lorsqu&#039;elle 
   est fournie avec un argument de chaîne comme premier paramètre, lèvera maintenant 
   une exception <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> au lieu d&#039;une erreur fatale 
   capturable si le code PHP n&#039;est pas valide. De même, l&#039;appel à 
   <span class="function"><a href="function.forward-static-call.php" class="function">forward_static_call()</a></span> en dehors d&#039;une étendue de classe lève 
   maintenant une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   Dans l&#039;extension Tidy, la création manuelle d&#039;un <span class="classname"><a href="class.tidynode.php" class="classname">tidyNode</a></span> 
   lèvera une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu d&#039;une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension WDDX, une référence circulaire lors de la sérialisation va 
   maintenant lever une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu d&#039;une 
   erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension XML-RPC, une référence circulaire lors de la sérialisation 
   lève maintenant une instance d&#039;exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu 
   de se traduire par une erreur fatale.
  </p>

  <p class="para">
   Dans l&#039;extension Zip, la méthode <span class="methodname"><a href="ziparchive.addglob.php" class="methodname">ZipArchive::addGlob()</a></span> 
   lève maintenant une exception <span class="classname"><a href="class.error.php" class="classname">Error</a></span> au lieu de se 
   traduire par une erreur fatale si la prise en charge de glob n&#039;est pas disponible.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.lexical-names">
  <h3 class="title">Les variables liées lexiquement ne peuvent pas réutiliser les noms</h3>

  <p class="para">
   Les variables liées à une <a href="functions.anonymous.php" class="link">fonction anonyme
   </a> via la construction <code class="literal">use</code> ne peuvent pas utiliser le 
   même nom que n&#039;importe quelle <a href="language.variables.predefined.php" class="link">superglobals</a>, <var class="varname">$this</var> ou 
   n&#039;importe quel paramètre. Par exemple, toutes ces définitions de fonction 
   entraîneront une erreur fatale :

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$this</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) {};</span></span></code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.long2ip">
  <h3 class="title">long2ip() changement de type de paramètre</h3>
  <p class="para">
   <span class="function"><a href="function.long2ip.php" class="function">long2ip()</a></span> attend maintenant un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> à la place 
   de <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.json">
  <h3 class="title">Encodage et décodage JSON</h3>
  <p class="para">
   Le paramètre INI <code class="parameter">serialize_precision</code> contrôle maintenant 
   la précision de sérialisation lors de l&#039;encodage des <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s.
  </p>
  <p class="para">
   Le décodage d&#039;une clé vide entraîne désormais un nom de propriété vide, plutôt 
   que <code class="literal">_empty_</code> comme nom de propriété.

   <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">json_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">json_encode</span><span style="color: #007700">([</span><span style="color: #DD0000">'' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">])));</span></span></code></div>
   </div>

   <p class="para">Résultat de l&#039;exemple ci-dessus est similaire à :</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
object(stdClass)#1 (1) {
  [&quot;&quot;]=&gt;
  int(1)
}
</pre></div>
   </div>
  </div>
  </p>
  <p class="para">
   Lorsque l&#039;indicateur <strong><code><a href="json.constants.php#constant.json-unescaped-unicode">JSON_UNESCAPED_UNICODE</a></code></strong> est fourni
   à <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span>, les séquences U+2028 et U+2029 sont 
   maintenant échappées.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.mbstring">
  <h3 class="title">
   Modifications de la sémantique des paramètres de <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>
  </h3>
  <p class="para">
   Le troisième paramètre des fonctions <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> (<code class="parameter">regs</code>) est désormais 
   défini sur un tableau vide si rien n&#039;a été mis en correspondance.
   Auparavant, le paramètre n&#039;aurait pas été modifié.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.openssl">
  <h3 class="title">Abandon des flux sslv2</h3>
  <p class="para">
   Le flux SSLv2 a maintenant été abandonné dans OpenSSL.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.typed-returns-compile-time">
  <h3 class="title">Interdit &quot;return;&quot; pour les retours typés lors de la compilation</h3>
  <p class="para">
   Une déclaration de retour sans arguments dans les fonctions qui déclarent un
   type de retour émet désormais <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong> (sauf si
   le type de retour est déclaré comme <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span>), même si la
   déclaration de retour ne serait jamais atteinte.
  </p>
 </div>

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