<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'migration70.new-features.php',
    1 => 'Nuove funzionalit&agrave;',
    2 => 'Nuove funzionalit&agrave;',
  ),
  'up' => 
  array (
    0 => 'migration70.php',
    1 => 'Migrating from PHP 5.6.x to PHP 7.0.x',
  ),
  'prev' => 
  array (
    0 => 'migration70.incompatible.php',
    1 => 'Backward incompatible changes',
  ),
  'next' => 
  array (
    0 => 'migration70.deprecated.php',
    1 => 'Deprecated features in PHP 7.0.x',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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">Nuove funzionalità</h2>

 <div class="sect2" id="migration70.new-features.scalar-type-declarations">
  <h3 class="title">Dichiarazioni di tipi scalari</h3>

  <p class="para">
   Le
   <a href="language.types.declarations.php" class="link">dichiarazioni di tipi</a> scalari
   sono disponibili in due versioni: coercitivo (predefinito) e rigoroso. I seguenti tipi
   per i parametri possono ora essere forzati (o coercitivo o rigoroso): stringhe
    (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>), interi (<code class="literal">int</code>), numeri con virgola
    mobile (<span class="type"><a href="language.types.float.php" class="type float">float</a></span>), e booleani (<code class="literal">bool</code>). Questi
    aumentano gli altri tipi introdotti in PHP 5: nomi delle classi, interfacce,
    <span class="type"><a href="language.types.array.php" class="type array">array</a></span> e <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">// Modalità coercitiva<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">sumOfInts</span><span style="color: #007700">(</span><span style="color: #0000BB">int </span><span style="color: #007700">...</span><span style="color: #0000BB">$ints</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">$ints</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">sumOfInts</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">Il precedente esempio visualizzerà:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
int(9)
</pre></div>
   </div>
  </div>

  <p class="para">
   Per abilitare la modalità rigorosa, una singola direttiva <a href="control-structures.declare.php" class="link"><code class="literal">declare</code></a> deve essere posizionata
   nella parte superiore del file. Questo significa che la severità della tipizzazione per i valori scalari è
   configurata su una base per-file. Questa direttiva interessa non solo le dichiarazioni
   di tipi di parametri, ma anche il tipo di ritorno di una funzione (vedere
   <a href="language.types.declarations.php" class="link">dichiarazioni dei tipi di ritorno</a>,
   le funzioni interne di PHP, e le funzioni delle estensioni
   caricate.
  </p>

  <p class="para">
   La documentazione completa e gli esempi sulle dichiarazioni dei tipi scalari si possono trovare
   nel riferimento 
   <a href="language.types.declarations.php" class="link">dichiarazione del
   tipo</a>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.return-type-declarations">
  <h3 class="title">Dichiarazioni del tipo di ritorno</h3>

  <p class="para">
   PHP 7 aggiunge il supporto per le 
   <a href="language.types.declarations.php" class="link">dichiarazioni del tipo di ritorno</a>.
   Analogamente alle
   <a href="language.types.declarations.php" class="link">dichiarazioni dei tipi degli argomenti</a>,
   le dichiarazioni del tipo di ritorno specificano il tipo del valore che sarà
   restituito da una funzione. Per le dichiarazioni del tipo di ritorno
   sono disponibili gli stessi <a href="language.types.declarations.php" class="link">tipi</a>
   che sono disponibili per le dichiarazioni
   del tipo degli argomenti.
  </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">arraysSum</span><span style="color: #007700">(array ...</span><span style="color: #0000BB">$arrays</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">$array</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">$array</span><span style="color: #007700">);<br />    }, </span><span style="color: #0000BB">$arrays</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">arraysSum</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">Il precedente esempio visualizzerà:</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">
   La documentazione completa e gli esempi sulle dichiarazioni del tipo di ritorno si possono trovare
   nel riferimento
   <a href="language.types.declarations.php" class="link">le dichiarazioni
   del tipo di ritorno</a>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.null-coalesce-op">
  <h3 class="title">Operatore null coalesce</h3>

  <p class="para">
   L&#039;operatore null coalesce (<code class="literal">??</code>) è stato aggiunto come
   zucchero sintattico per il caso comune di dover utilizzare una ternaria in
   congiunzione con <span class="function"><a href="function.isset.php" class="function">isset()</a></span>. Esso restituisce il suo primo operando
   se esiste e non è <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>; altrimenti restituisce il suo secondo operando.
  </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">// Legge il valore di $_GET['user'] e restituisce 'nobody'<br />// se esso non esiste.<br /></span><span style="color: #0000BB">$username </span><span style="color: #007700">= </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'user'</span><span style="color: #007700">] ?? </span><span style="color: #DD0000">'nobody'</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// Questo è equivalente a:<br /></span><span style="color: #0000BB">$username </span><span style="color: #007700">= isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'user'</span><span style="color: #007700">]) ? </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'user'</span><span style="color: #007700">] : </span><span style="color: #DD0000">'nobody'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Più Coalesce possono essere incatenati: questo restituirà il primo<br />// valore definito tra $_GET['user'], $_POST['user'], e<br />// 'nobody'.<br /></span><span style="color: #0000BB">$username </span><span style="color: #007700">= </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'user'</span><span style="color: #007700">] ?? </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'user'</span><span style="color: #007700">] ?? </span><span style="color: #DD0000">'nobody'</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;operatore spaceship</h3>
  <p class="para">
   L&#039;operatore spaceship è usato per confrontare due espressioni. Restituisce -1, 0
   o 1 quando <var class="varname">$a</var> è rispettivamente minore, uguale, o maggiore
   di <var class="varname">$b</var>. I confronti sono eseguiti secondo le consuete 
   <a href="types.comparisons.php" class="link">regole di confronto dei tipi</a> di 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">// Interi<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 />// Numeri decimali<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 />// Stringhe<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">Array costanti che usano <span class="function"><a href="function.define.php" class="function">define()</a></span></h3>

  <p class="para">
   Ora possono essere definiti <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span> costanti con
   <span class="function"><a href="function.define.php" class="function">define()</a></span>. In PHP 5.6, potevano essere definiti solo con
   <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">'ANIMALS'</span><span style="color: #007700">, [<br />    </span><span style="color: #DD0000">'dog'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'cat'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'bird'<br /></span><span style="color: #007700">]);<br /><br />echo </span><span style="color: #0000BB">ANIMALS</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]; </span><span style="color: #FF8000">// visualizza "cat"<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">Classi anonime</h3>

  <p class="para">
   Il supporto per le classi anonime è stato aggiunto via <code class="literal">new
   class</code>. Queste possono essere usate al posto di definizioni di classi complete per
   oggetti usa e getta:
  </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">Il precedente esempio visualizzerà:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
object(class@anonymous)#2 (0) {
}
</pre></div>
   </div>
  </div>

  <p class="para">
   La documentazione completa può essere trovata nel 
   <a href="language.oop5.anonymous.php" class="link">riferimento delle classi anonime</a>.
  </p>
 </div>

 <div class="sect2" id="migration70.new-features.unicode-codepoint-escape-syntax">
  <h3 class="title">Sintassi dell&#039;escape del codepoint Unicode</h3>

  <p class="para">
   Questo ha come input un codepoint Unicode in una forma esadecimale, e restituisce quel
   codepoint in UTF-8 in una stringa con doppi apici oppure un heredoc. Qualsiasi codepoint
   valido è accettato, con gli iniziali 0 opzionali.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">echo "\u{aa}";<br />echo "\u{0000aa}";<br />echo "\u{9999}";</span></code></div>
   </div>

   <p class="para">Il precedente esempio visualizzerà:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
ª
ª (stesso di prima ma con gli iniziali 0 opzionali)
香
</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">
   <span class="methodname"><a href="closure.call.php" class="methodname">Closure::call()</a></span> è un modo più performante e abbreviato
   di effettuare un binding temporaneo dello scope di un oggetto ad una closure e di invocarla.
  </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">// Codice prima di 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">// closure intermedia<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">// Codice 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">Il precedente esempio visualizzerà:</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> filtrata</h3>

  <p class="para">
   Questa funzionalità cerca di fornire una miglior sicurezza quando si deserializzano oggetti su
   dati non attendibili. Previene possibili iniezioni di codice, consentendo agli
   sviluppatori di inserire nella whitelist le classi che possono essere deserializzate.
  </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">// converte tutti gli oggetti in oggetti __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">// converte tutti gli oggetti in oggetti __PHP_Incomplete_Class eccetto quelli di MyClass e 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">// comportamento predefinito (lo stesso che si ha omettendo il secondo argomento) che accetta tutte le classi<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 nuova classe <span class="classname"><a href="class.intlchar.php" class="classname">IntlChar</a></span> cerca di esporre funzionalità ICU
   addizionali. La classe stessa definisce un numero di metodi statici e
   costanti che possono essere usati per manipolare i caratteri 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">Il precedente esempio visualizzerà:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
10ffff
COMMERCIAL AT
bool(true)
</pre></div>
   </div>
  </div>

  <p class="para">
   Per poter utilizzare questa classe, l&#039;estensione <a href="book.intl.php" class="link">Intl</a> deve essere installata.
  </p>
 </div>

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

  <p class="para">
   Le <a href="function.assert.php#function.assert.expectations" class="link">aspetattive</a> sono dei
   miglioramenti retrocompatibili alla vecchia funzione
   <span class="function"><a href="function.assert.php" class="function">assert()</a></span>. Permettono asserzioni a costo zero nel codice di produzione, e
   forniscono la possibilità di lanciare eccezioni personalizzate quando l&#039;asserzione fallisce.
  </p>

  <p class="para">
   Mentre la vecchia API continua ad essere mantenuta per compatibilità,
   <span class="function"><a href="function.assert.php" class="function">assert()</a></span> è ora un costrutto del linguaggio, consentendo al primo
   parametro di essere un&#039;espressione piuttosto che solo una <span class="type"><a href="language.types.string.php" class="type string">string</a></span> da essere
   valutata o un valore <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> da essere testato.
  </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">'Qualche messaggio di errore'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">Il precedente esempio visualizzerà:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught CustomError: Qualche messaggio di errore
</pre></div>
   </div>
  </div>

  <p class="para">
   Tutti i dettagli su questa funzione, incluso come configurarla sia in
   ambienti di sviluppo che di produzione, possono essere trovati nella
   <a href="function.assert.php#function.assert.expectations" class="link">sezione aspettative</a>
   del riferimento <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">Raggruppare le dichiarazioni <code class="literal">use</code></h3>

  <p class="para">
   Classi, funzioni e costanti importati dallo stesso <a href="language.namespaces.definition.php" class="link"><code class="literal">namespace</code></a>
   possono ora essere raggruppati insieme in una singola istruzione <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">// Codice prima di 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">// Codice 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">Generatore di espressioni di ritorno</h3>

  <p class="para">
   Questa caratteristica si basa sulle funzionalità del generatore introdotte in PHP 5.5.
   Si abilita per un&#039;istruzione <code class="literal">return</code> per essere usata all&#039;interno di un
   generatore per abilitare per una espressione final per essere restituita (il ritorno per
   referenza non è permesso). Questo valore può essere preso usando il nuovo
   metodo <code class="literal">Generator::getReturn()</code>, che può solo essere usato
   una volta che il generatore ha finito di effettuare lo yield dei valori.
  </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">Il precedente esempio visualizzerà:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
1
2
3
</pre></div>
   </div>
  </div>

  <p class="para">
   Essere in grado di restituire esplicitamente un valore final da un generatore è un&#039;abilità
   comoda da avere. Questo perchè abilita per un valore final da essere restituito
   da un generatore (forse da qualche forma di routine di computazione) che può essere
   specificamente gestito dal codice client eseguendo il generatore. Questo è molto più
   semplice rispetto a forzare il codice del client a controllare prima che il valore
   final sia stato yieldato, e in quel caso, gestire il valore specificamente.
  </p>
 </div>
 <div class="sect2" id="migration70.new-features.generator-delegation">
  <h3 class="title">Delegazione del generatore</h3>

  <p class="para">
   I generatori possono ora delegare ad un altro generatore,
   oggetti <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> o <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
   automaticamente, senza la necessita di scrivere boilerplate nel generatore
   più esterno usando il costrutto <a href="language.generators.syntax.php#control-structures.yield.from" class="link"><code class="literal">yield from</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: #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">Il precedente esempio visualizzerà:</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">Divisione intera con <span class="function"><a href="function.intdiv.php" class="function">intdiv()</a></span></h3>

  <p class="para">
   La nuova funzione <span class="function"><a href="function.intdiv.php" class="function">intdiv()</a></span> esegue una divisione intera
   dei suoi operandi e la restituisce.
  </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">Il precedente esempio visualizzerà:</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">Opzioni di sessione</h3>

  <p class="para">
   <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> ora accetta un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> di
   opzioni che sovrascrivono le
   <a href="session.configuration.php" class="link">direttive di configurazione della sessione</a>
   normalmente impostate nel php.ini.
  </p>

  <p class="para">
   Queste opzioni sono state inoltre ampliate per supportare
   <a href="session.configuration.php#ini.session.lazy-write" class="link">session.lazy_write</a>, che è
   attivo di default e fa in modo che PHP possa solo sovrascrivere qualsiasi file di sessione se i
   dati di sessione sono cambiati, e <code class="literal">read_and_close</code>, che è
   un&#039;opzione che può solo essere passata a <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> per
   indicare che i dati di sessione dovrebbero essere letti e quindi che la sessione deve
   essere immediatamente chiusa senza cambiamenti.
  </p>

  <p class="para">
   Per esempio, impostare
   <a href="session.configuration.php#ini.session.cache-limiter" class="link">session.cache_limiter</a> a
   <code class="literal">private</code> e chiudere immediatamente la sessione dopo averla
   letta:
  </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 nuova funzione <span class="function"><a href="function.preg-replace-callback-array.php" class="function">preg_replace_callback_array()</a></span> abilita
   il codice per essere scritto in maniera più pulita quando si usa la funzione
   <span class="function"><a href="function.preg-replace-callback.php" class="function">preg_replace_callback()</a></span>. Prima di PHP 7,
   le callback che avevano bisogno di essere eseguite per espressioni regolari richiedevano che
   la funzione di callback venisse sporcata con un sacco di ramificazione.
  </p>

  <p class="para">
   Ora, le callback possono essere registrate ad ogni espressione regolare usando un
   array associativo, dove la chiave è un&#039;espressione regolare e il valore è una
   callback.
  </p>
 </div>

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

  <p class="para">
   Due nuove funzioni sono state aggiunte per generare interi e stringhe
   crittograficamente sicuri in modo cross-platform:
   <span class="function"><a href="function.random-bytes.php" class="function">random_bytes()</a></span> e <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">
   <span class="function"><a href="function.list.php" class="function">list()</a></span> può sempre spacchettare oggetti implementando
   <span class="classname"><a href="class.arrayaccess.php" class="classname">ArrayAccess</a></span>
  </h3>

  <p class="para">
   Precedentemente, non era garantito che <span class="function"><a href="function.list.php" class="function">list()</a></span> operasse
   correttamente con gli oggetti che implementavano <span class="classname"><a href="class.arrayaccess.php" class="classname">ArrayAccess</a></span>.
   Questo è stato risolto.
  </p>
 </div>
 
 <div class="sect2" id="migration70.new-features.others">
  <h3 class="title">Altre Caratteristiche</h3>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     È stato aggiunto l&#039;accesso ai membri della classe in fase di clonazione,
     per esempio <code class="literal">(clone $foo)-&gt;bar()</code>.
    </span>
   </li>
  </ul>
 </div>
</div><?php manual_footer($setup); ?>