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

contributors($setup);

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

 <div class="sect2" id="migration70.new-features.scalar-type-declarations">
  <h3 class="title">Déclarations du type scalaire</h3>

  <p class="para">
   Les <a href="language.types.declarations.php" class="link">déclarations de type</a>
   scalaire viennent en deux modes : coercitif (par défaut) ou strict. Les types de paramètres
   suivants peuvent être renforcés (soit coercitif soit strict) : les chaînes de caractères
   (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>), les entiers (<code class="literal">int</code>),
   les décimaux (<span class="type"><a href="language.types.float.php" class="type float">float</a></span>) et les valeurs booléennes (<code class="literal">bool</code>).
   Ils complémentent les autres types introduits dans PHP 5 : les noms des classes, les interfaces,
   les tableaux (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>) et les fonctions appelables (<span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>).
  </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: #FF8000">// Mode coercitive<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">sommeEntiers</span><span style="color: #007700">(</span><span style="color: #0000BB">int </span><span style="color: #007700">...</span><span style="color: #0000BB">$entiers</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #0000BB">array_sum</span><span style="color: #007700">(</span><span style="color: #0000BB">$entiers</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sommeEntiers</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'3'</span><span style="color: #007700">, </span><span style="color: #0000BB">4.1</span><span style="color: #007700">));</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>
int(9)
</pre></div>
   </div>
  </div>

  <p class="para">
   Pour activer le mode strict, une seule directive <a href="control-structures.declare.php" class="link"><code class="literal">declare</code></a> doit être placée
   en haut du fichier. Ceci signifie que le mode strict de déclaration du type
   scalaire est configuré par fichier. La directive n&#039;affecte pas seulement la
   déclaration des paramètres mais aussi le type de retour de la fonction (voir
   <a href="language.types.declarations.php" class="link">les déclarations du type de retour</a>
   dans les fonctions PHP et celles issues des extensions).
  </p>

  <p class="para">
   Une documentation complète et des exemples de déclarations du type scalaire
   peuvent être trouvés dans la référence : <a href="language.types.declarations.php" class="link">Déclarations de type</a>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.return-type-declarations">
  <h3 class="title">Déclarations du type de retour</h3>

  <p class="para">
   PHP 7 ajoute un support pour les
   <a href="language.types.declarations.php" class="link">déclarations du type de retour</a>.
   Similaires aux 
   <a href="language.types.declarations.php" class="link">déclarations du type d&#039;argument</a>,
   les déclarations du type de retour spécifient le type de la valeur qui sera retournée par la fonction.
   Les mêmes 
   <a href="language.types.declarations.php" class="link">types</a>
   qui sont disponibles pour les déclarations du type de retour sont disponibles pour les déclarations
   du type d&#039;argument.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">sommeTableaux</span><span style="color: #007700">(array ...</span><span style="color: #0000BB">$tableaux</span><span style="color: #007700">): array<br />{<br />    return </span><span style="color: #0000BB">array_map</span><span style="color: #007700">(function(array </span><span style="color: #0000BB">$tableaux</span><span style="color: #007700">): </span><span style="color: #0000BB">int </span><span style="color: #007700">{<br />        return </span><span style="color: #0000BB">array_sum</span><span style="color: #007700">(</span><span style="color: #0000BB">$tableaux</span><span style="color: #007700">);<br />    }, </span><span style="color: #0000BB">$tableaux</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">sommeTableaux</span><span style="color: #007700">([</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">2</span><span style="color: #007700">,</span><span style="color: #0000BB">3</span><span style="color: #007700">], [</span><span style="color: #0000BB">4</span><span style="color: #007700">,</span><span style="color: #0000BB">5</span><span style="color: #007700">,</span><span style="color: #0000BB">6</span><span style="color: #007700">], [</span><span style="color: #0000BB">7</span><span style="color: #007700">,</span><span style="color: #0000BB">8</span><span style="color: #007700">,</span><span style="color: #0000BB">9</span><span style="color: #007700">]));</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>
Array
(
    [0] =&gt; 6
    [1] =&gt; 15
    [2] =&gt; 24
)
</pre></div>
   </div>
  </div>

  <p class="para">
   Une documentation complète et des exemples de déclarations du type de retour
   peuvent être trouvés dans la référence : <a href="language.types.declarations.php" class="link">Déclarations du type de retour</a>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.null-coalesce-op">
  <h3 class="title">L&#039;opérateur Null coalescent</h3>

  <p class="para">
   L&#039;opérateur Null coalescent (<code class="literal">??</code>) a été ajouté comme un sucre 
   syntaxique pour les cas de besoin les plus communs d&#039;utiliser une troisième conjonction 
   avec la fonction <span class="function"><a href="function.isset.php" class="function">isset()</a></span>. Il retourne le premier opérande s&#039;il existe 
   et n&#039;a pas une valeur <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>; et retourne le second opérande sinon.
  </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: #FF8000">// Récupère la valeur de $_GET['utilisateur'] retourne 'aucun'<br />// s'il n'existe pas.<br /></span><span style="color: #0000BB">$identifiant </span><span style="color: #007700">= </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'utilisateur'</span><span style="color: #007700">] ?? </span><span style="color: #DD0000">'aucun'</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// Ceci est équivalent à :<br /></span><span style="color: #0000BB">$identifiant </span><span style="color: #007700">= isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'utilisateur'</span><span style="color: #007700">]) ? </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'utilisateur'</span><span style="color: #007700">] : </span><span style="color: #DD0000">'aucun'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// L'opérateur permet de faire du chaînage : Ceci va retourner la première<br />// valeur définie respectivement dans $_GET['utilisateur'], $_POST['utilisateur']<br />// et 'aucun'.<br /></span><span style="color: #0000BB">$identifiant </span><span style="color: #007700">= </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'utilisateur'</span><span style="color: #007700">] ?? </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'utilisateur'</span><span style="color: #007700">] ?? </span><span style="color: #DD0000">'aucun'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  
 </div>

 <div class="sect2" id="migration70.new-features.spaceship-op">
  <h3 class="title">L&#039;opérateur Spaceship</h3>
  <p class="para">
   L&#039;opérateur Spaceship est utilisé pour comparer deux expressions. 
   Il retourne -1, 0 ou 1 quand <var class="varname">$a</var> est respectivement inférieur, 
   égal ou supérieur à <var class="varname">$b</var>. Les comparaisons sont effectuées 
   selon 
   <a href="types.comparisons.php" class="link">les règles de comparaison de types</a> 
   habituelles de PHP.
  </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: #FF8000">// Entiers<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">1 </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// 0<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">1 </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">; </span><span style="color: #FF8000">// -1<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">2 </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /><br />// Nombres à virgule flottante<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">1.5 </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">1.5</span><span style="color: #007700">; </span><span style="color: #FF8000">// 0<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">1.5 </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">2.5</span><span style="color: #007700">; </span><span style="color: #FF8000">// -1<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">2.5 </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">1.5</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /> <br />// Chaînes de caractères<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"a" </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #DD0000">"a"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 0<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"a" </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">; </span><span style="color: #FF8000">// -1<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"b" </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #DD0000">"a"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  
 </div>

 <div class="sect2" id="migration70.new-features.define-array">
  <h3 class="title">Les tableaux constants à l&#039;aide de <span class="function"><a href="function.define.php" class="function">define()</a></span></h3>

  <p class="para">
   Les tableaux (<span class="type"><a href="language.types.array.php" class="type Array">Array</a></span>) constants peuvent maintenant être définis 
   avec la fonction <span class="function"><a href="function.define.php" class="function">define()</a></span>. Dans PHP 5.6, ils pouvaient 
   être définis seulement avec <a href="language.constants.syntax.php" class="link"><code class="literal">const</code></a>.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">'ANIMAUX'</span><span style="color: #007700">, [<br />    </span><span style="color: #DD0000">'chien'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'chat'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'oiseau'<br /></span><span style="color: #007700">]);<br /><br />echo </span><span style="color: #0000BB">ANIMAUX</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]; </span><span style="color: #FF8000">// affiche "chat"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration70.new-features.anonymous-classes">
  <h3 class="title">Les classes anonymes</h3>

  <p class="para">
   La prise en charge des classes anonymes a été ajoutée à travers 
   l&#039;instanciation <code class="literal">new class</code>. Celle-ci peut être utilisée 
   au lieu de définir toute une classe pour des objets jetables :
  </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">interface </span><span style="color: #0000BB">Logger </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">log</span><span style="color: #007700">(</span><span style="color: #0000BB">string $msg</span><span style="color: #007700">);<br />}<br /><br />class </span><span style="color: #0000BB">Application </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$logger</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">getLogger</span><span style="color: #007700">(): </span><span style="color: #0000BB">Logger </span><span style="color: #007700">{<br />         return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">logger</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">setLogger</span><span style="color: #007700">(</span><span style="color: #0000BB">Logger $logger</span><span style="color: #007700">) {<br />         </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">logger </span><span style="color: #007700">= </span><span style="color: #0000BB">$logger</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$app </span><span style="color: #007700">= new </span><span style="color: #0000BB">Application</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$app</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setLogger</span><span style="color: #007700">(new class implements </span><span style="color: #0000BB">Logger </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">log</span><span style="color: #007700">(</span><span style="color: #0000BB">string $msg</span><span style="color: #007700">) {<br />        echo </span><span style="color: #0000BB">$msg</span><span style="color: #007700">;<br />    }<br />});<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$app</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getLogger</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</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>
object(class@anonymous)#2 (0) {
}
</pre></div>
   </div>
  </div>

  <p class="para">
   La documentation complète peut être trouvée dans 
   <a href="language.oop5.anonymous.php" class="link">la référence des classes anonymes</a>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.unicode-codepoint-escape-syntax">
  <h3 class="title">Syntaxe d’échappement du point de code Unicode</h3>

  <p class="para">
   Cela prend un point de code Unicode sous forme hexadécimale, dans une chaîne 
   entre doubles guillemets ou une syntaxe heredoc, pour le convertir 
   en UTF-8. N’importe quel point de code valide est accepté, 
   les zéros en début de chaîne étant facultatifs.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"\u{aa}"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"\u{0000aa}"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"\u{9999}"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">\u{01f418}<br /></span><span style="color: #007700">EOT;<br /><br /></span><span style="color: #0000BB">?&gt;</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>
ª
ª (même affichage que la ligne précédente mais avec des zéros en début de chaîne)
香
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration70.new-features.closure-call-method">
  <h3 class="title"><span class="methodname"><a href="closure.call.php" class="methodname">Closure::call()</a></span></h3>

  <p class="para">
   La méthode <span class="methodname"><a href="closure.call.php" class="methodname">Closure::call()</a></span> est devenue plus performante. 
   Une façon plus courte de lier temporairement une fermeture à la portée d&#039;un 
   objet et l&#039;invoquer.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A </span><span style="color: #007700">{private </span><span style="color: #0000BB">$x </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;}<br /><br /></span><span style="color: #FF8000">// Code avant PHP 7<br /></span><span style="color: #0000BB">$getX </span><span style="color: #007700">= function() {return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">x</span><span style="color: #007700">;};<br /></span><span style="color: #0000BB">$getXCB </span><span style="color: #007700">= </span><span style="color: #0000BB">$getX</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindTo</span><span style="color: #007700">(new </span><span style="color: #0000BB">A</span><span style="color: #007700">, </span><span style="color: #DD0000">'A'</span><span style="color: #007700">); </span><span style="color: #FF8000">// fermeture intermédiaire<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$getXCB</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Code PHP 7+<br /></span><span style="color: #0000BB">$getX </span><span style="color: #007700">= function() {return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">x</span><span style="color: #007700">;};<br />echo </span><span style="color: #0000BB">$getX</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">call</span><span style="color: #007700">(new </span><span style="color: #0000BB">A</span><span style="color: #007700">);</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>
1
1
</pre></div>
   </div>
  </div>
 </div>
 <div class="sect2" id="migration70.new-features.filtered-unserialize">
  <h3 class="title"><span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> est filtrée</h3>

  <p class="para">
   Cette fonctionnalité vise à garantir une meilleure sécurité lorsque 
   la désérialisation d’objets est effectuée avec des données non fiables. 
   Elle empêche les injections de code possibles en permettant au développeur
   de mettre en liste blanche les classes qui peuvent être désérialisées.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">// Convertit tous les objets vers un objet __PHP_Incomplete_Class<br /></span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">, [</span><span style="color: #DD0000">"allowed_classes" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">false</span><span style="color: #007700">]);<br /><br /></span><span style="color: #FF8000">// Convertit tous les objets vers un objet __PHP_Incomplete_Class <br />// exceptés ceux de MyClass et MyClass2<br /></span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">, [</span><span style="color: #DD0000">"allowed_classes" </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">"MyClass"</span><span style="color: #007700">, </span><span style="color: #DD0000">"MyClass2"</span><span style="color: #007700">]]);<br /><br /></span><span style="color: #FF8000">// Comportement par défaut (le même que lorsqu'on omet le deuxième argument) <br />// qui accepte toutes les classes<br /></span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">, [</span><span style="color: #DD0000">"allowed_classes" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">true</span><span style="color: #007700">]);</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration70.new-features.intlchar">
  <h3 class="title"><span class="classname"><a href="class.intlchar.php" class="classname">IntlChar</a></span></h3>

  <p class="para">
   La nouvelle classe <span class="classname"><a href="class.intlchar.php" class="classname">IntlChar</a></span> cherche à exposer 
   la fonctionnalité ICU en plus. La classe elle-même définit un nombre de méthodes 
   statiques et de constantes qui peuvent être utilisées pour manipuler les 
   caractères unicode.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />printf</span><span style="color: #007700">(</span><span style="color: #DD0000">'%x'</span><span style="color: #007700">, </span><span style="color: #0000BB">IntlChar</span><span style="color: #007700">::</span><span style="color: #0000BB">CODEPOINT_MAX</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">IntlChar</span><span style="color: #007700">::</span><span style="color: #0000BB">charName</span><span style="color: #007700">(</span><span style="color: #DD0000">'@'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">IntlChar</span><span style="color: #007700">::</span><span style="color: #0000BB">ispunct</span><span style="color: #007700">(</span><span style="color: #DD0000">'!'</span><span style="color: #007700">));</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>
10ffff
COMMERCIAL AT
bool(true)
</pre></div>
   </div>
  </div>

  <p class="para">
   Pour utiliser cette classe, il est nécessaire d&#039;installer l&#039;extension
   <a href="book.intl.php" class="link">Intl</a>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.expectations">
  <h3 class="title">Les attentes</h3>

  <p class="para">
   Les attentes sont 
   une amélioration rétro-compatible apportée à l&#039;ancienne fonction
   <span class="function"><a href="function.assert.php" class="function">assert()</a></span>. Elles offrent des assertions à très faible
   coût dans le code de production et permettent de lever des exceptions 
   personnalisées lorsque l’assertion échoue.
  </p>

  <p class="para">
   Alors que l&#039;ancienne API continue à être maintenue pour des raisons de
   compatibilité, la fonction <span class="function"><a href="function.assert.php" class="function">assert()</a></span> est maintenant 
   une construction de langage, permettant au premier paramètre d&#039;être 
   une expression plutôt qu&#039;un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> à évaluer ou un 
   <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> à tester.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'assert.exception'</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /><br />class </span><span style="color: #0000BB">CustomError </span><span style="color: #007700">extends </span><span style="color: #0000BB">AssertionError </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #0000BB">false</span><span style="color: #007700">, new </span><span style="color: #0000BB">CustomError</span><span style="color: #007700">(</span><span style="color: #DD0000">'Un message d\'erreur'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</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>
Fatal error: Uncaught CustomError: Un message d&#039;erreur
</pre></div>
   </div>
  </div>

  <p class="para">
   On trouvera plus de détails sur cette fonctionnalité, y compris la façon de la configurer
   dans les environnements de développement et de production, dans 
   la section attentes 
   dans la référence de la fonction <span class="function"><a href="function.assert.php" class="function">assert()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.group-use-declarations">
  <h3 class="title">Grouper les déclarations <code class="literal">use</code></h3>

  <p class="para">
   Les classes, les fonctions et les constantes importées à partir du même <a href="language.namespaces.definition.php" class="link"><code class="literal">namespace</code></a>
   peuvent être groupées maintenant dans une seule instruction <a href="language.namespaces.importing.php" class="link"><code class="literal">use</code></a>.
  </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: #FF8000">// Code avant PHP 7<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">some\namespace\ClassA</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">some\namespace\ClassB</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">some\namespace\ClassC </span><span style="color: #007700">as </span><span style="color: #0000BB">C</span><span style="color: #007700">;<br /><br />use function </span><span style="color: #0000BB">some\namespace\fn_a</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">some\namespace\fn_b</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">some\namespace\fn_c</span><span style="color: #007700">;<br /><br />use const </span><span style="color: #0000BB">some\namespace\ConstA</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">some\namespace\ConstB</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">some\namespace\ConstC</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Code PHP 7+<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">some\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">ClassA</span><span style="color: #007700">, </span><span style="color: #0000BB">ClassB</span><span style="color: #007700">, </span><span style="color: #0000BB">ClassC </span><span style="color: #007700">as </span><span style="color: #0000BB">C</span><span style="color: #007700">};<br />use function </span><span style="color: #0000BB">some\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">fn_a</span><span style="color: #007700">, </span><span style="color: #0000BB">fn_b</span><span style="color: #007700">, </span><span style="color: #0000BB">fn_c</span><span style="color: #007700">};<br />use const </span><span style="color: #0000BB">some\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">ConstA</span><span style="color: #007700">, </span><span style="color: #0000BB">ConstB</span><span style="color: #007700">, </span><span style="color: #0000BB">ConstC</span><span style="color: #007700">};<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration70.new-features.generator-return-expressions">
  <h3 class="title">Expressions de retour générateur</h3>

  <p class="para">
   Cette fonction se base sur la fonctionnalité de générateur introduite dans PHP 5.5. 
   Elle permet d&#039;utiliser une instruction <code class="literal">return</code> dans un générateur 
   pour retourner une expression finale (le retour par référence n&#039;est pas autorisé). 
   Cette valeur peut être extraite en utilisant la nouvelle méthode  
   <code class="literal">Generator::getReturn()</code>, qui ne peut être utilisée que lorsque 
   le générateur a fini de rendre les valeurs.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$gen </span><span style="color: #007700">= (function() {<br />    yield </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    yield </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />    return </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br />})();<br /><br />foreach (</span><span style="color: #0000BB">$gen </span><span style="color: #007700">as </span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">$gen</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getReturn</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;</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>
1
2
3
</pre></div>
   </div>
  </div>

  <p class="para">
   C&#039;est très pratique d&#039;être capable de renvoyer explicitement une valeur finale 
   d&#039;un générateur. Car cela permet à une valeur finale, susceptible d&#039;être gérée 
   spécialement par le code client exécutant le générateur, d&#039;être retournée par le générateur 
   (peut-être à partir d&#039;une forme de calcul coroutine). C&#039;est de loin plus simple 
   que de forcer le code client à vérifier d&#039;abord si la valeur finale a été rendue,
   puis de gérer spécifiquement la valeur quand c&#039;est le cas.
  </p>
 </div>
 <div class="sect2" id="migration70.new-features.generator-delegation">
  <h3 class="title">Délégation de générateur</h3>

  <p class="para">
   Les générateurs peuvent maintenant être délégués automatiquement à un autre générateur, 
   un objet <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> ou un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>, 
   en utilisant <a href="language.generators.syntax.php#control-structures.yield.from" class="link"><code class="literal">yield from</code></a>, sans avoir recours à du code générique dans
   le générateur le plus externe.
  </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">gen</span><span style="color: #007700">()<br />{<br />    yield </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    yield </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />    yield from </span><span style="color: #0000BB">gen2</span><span style="color: #007700">();<br />}<br /><br />function </span><span style="color: #0000BB">gen2</span><span style="color: #007700">()<br />{<br />    yield </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br />    yield </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br />}<br /><br />foreach (</span><span style="color: #0000BB">gen</span><span style="color: #007700">() as </span><span style="color: #0000BB">$val</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</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>
1
2
3
4
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration70.new-features.intdiv">
  <h3 class="title">La division d’entiers avec <span class="function"><a href="function.intdiv.php" class="function">intdiv()</a></span></h3>

  <p class="para">
   La nouvelle fonction <span class="function"><a href="function.intdiv.php" class="function">intdiv()</a></span> retourne le résultat de la division 
   d&#039;entiers effectuée sur ses opérandes.
  </p>

  <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">intdiv</span><span style="color: #007700">(</span><span style="color: #0000BB">10</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</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>
int(3)
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration70.new-features.session-options">
  <h3 class="title">Les options de session</h3>

  <p class="para">
   La fonction <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> accepte maintenant un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 
   d&#039;options qui surcharge 
   <a href="session.configuration.php" class="link">les directives de configuration de session</a> 
   manuellement configurées dans le fichier php.ini.
  </p>

  <p class="para">
   Ces options ont aussi étendu le support pour l&#039;option
   <a href="session.configuration.php#ini.session.lazy-write" class="link">session.lazy_write</a>, 
   qui est activée par défaut et pousse PHP à surcharger les fichiers de session 
   seulement si les données de session ont été mises à jour, et l&#039;option 
   <code class="literal">read_and_close</code>, ne pouvant être passée à la fonction 
   <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> que pour indiquer si les données de session 
   doivent être lues avant que la session soit terminée sans changements.
  </p>

  <p class="para">
   Par exemple, pour mettre <a href="session.configuration.php#ini.session.cache-limiter" class="link">session.cache_limiter</a> 
   à <code class="literal">private</code> et fermer immédiatement la session après l&#039;avoir lue :
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />session_start</span><span style="color: #007700">([<br />    </span><span style="color: #DD0000">'cache_limiter' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'private'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'read_and_close' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">true</span><span style="color: #007700">,<br />]);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration70.new-features.preg-repace-callback-array-function">
  <h3 class="title"><span class="function"><a href="function.preg-replace-callback-array.php" class="function">preg_replace_callback_array()</a></span></h3>

  <p class="para">
   La nouvelle fonction <span class="function"><a href="function.preg-replace-callback-array.php" class="function">preg_replace_callback_array()</a></span> 
   permet au code d&#039;être écrit de façon plus propre en utilisant la fonction 
   <span class="function"><a href="function.preg-replace-callback.php" class="function">preg_replace_callback()</a></span>. Avant PHP 7, les fonctions de rappel (callback) 
   devaient être exécutées par expression régulière ce qui demande à la fonction de rappel 
   d&#039;être salie avec beaucoup de ramifications.
  </p>

  <p class="para">
   Maintenant, les fonctions de rappel peuvent être enregistrées pour chaque expression 
   régulière en utilisant un tableau associatif, là où la clé est une expression régulière 
   ayant la fonction de rappel comme valeur.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.csprng-functions">
  <h3 class="title">Les fonctions CSPRNG</h3>

  <p class="para">
   Deux nouvelles fonctions ont été ajoutées pour générer cryptographiquement des entiers 
   et des chaînes de caractères sécurisées de façon multi-plateforme :
   <span class="function"><a href="function.random-bytes.php" class="function">random_bytes()</a></span> et <span class="function"><a href="function.random-int.php" class="function">random_int()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.list-arrayaccess">
  <h3 class="title">
   La fonction <span class="function"><a href="function.list.php" class="function">list()</a></span> peut toujours déballer les objets qui implémentent
   <span class="classname"><a href="class.arrayaccess.php" class="classname">ArrayAccess</a></span>
  </h3>

  <p class="para">
   Auparavant, la fonction <span class="function"><a href="function.list.php" class="function">list()</a></span> ne pouvait pas opérer à 100% sur des objets 
   qui implémentent <span class="classname"><a href="class.arrayaccess.php" class="classname">ArrayAccess</a></span>. Maintenant, ça a été corrigé.
  </p>
 </div>
 
 <div class="sect2" id="migration70.new-features.others">
  <h3 class="title">Autres fonctionnalités</h3>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     L&#039;accès aux membres de la classe (attributs et méthodes) lors du clonage a été ajouté.
     Exemple, <code class="literal">(clone $foo)-&gt;bar()</code>.
    </span>
   </li>
  </ul>
 </div>
</div><?php manual_footer($setup); ?>