<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.operators.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Operatori di confronto',
    2 => 'Operatori di confronto',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operatori',
  ),
  'prev' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Operatori sui bit',
  ),
  'next' => 
  array (
    0 => 'language.operators.errorcontrol.php',
    1 => 'Operatori di controllo errori',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'language/operators/comparison.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.operators.comparison" class="sect1">
 <h2 class="title">Operatori di confronto</h2>
 <p class="simpara">
  Gli operatori di confronto, come suggerisce il loro nome, permettono di confrontare
  due valori. Può essere interessante vedere la
  <a href="types.comparisons.php" class="link">tabella di raffronto dei tipi</a>,
  dato che mostra esempi di vari confronti tra i tipi di variabili.
 </p>
 <table class="doctable table">
  <caption><strong>Operatori di confronto</strong></caption>
  
   <thead>
    <tr>
     <th>Esempio</th>
     <th>Nome</th>
     <th>Risultato</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td>$a == $b</td>
     <td>Uguale</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è uguale a <var class="varname">$b</var> dopo la manipolazione dei tipi.</td>
    </tr>

    <tr>
     <td>$a === $b</td>
     <td>Identico</td>
     <td>
      <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è uguale a <var class="varname">$b</var>, ed sono dello stesso
      tipo.
     </td>
    </tr>

    <tr>
     <td>$a != $b</td>
     <td>Diversi</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è diverso da <var class="varname">$b</var> dopo la manipolazione dei tipi.</td>
    </tr>

    <tr>
     <td>$a &lt;&gt; $b</td>
     <td>Diversi</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è diverso da <var class="varname">$b</var> dopo la manipolazione dei tipi.</td>
    </tr>

    <tr>
     <td>$a !== $b</td>
     <td>Non identici</td>
     <td>
      <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è diverso da <var class="varname">$b</var>, o se non sono dello stesso
      tipo.
     </td>
    </tr>

    <tr>
     <td>$a &lt; $b</td>
     <td>Minore</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è strettamente minore di <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &gt; $b</td>
     <td>Maggiore</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è strettamente maggiore di <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &lt;= $b</td>
     <td>Minore o uguale</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è minore o uguale a <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &gt;= $b</td>
     <td>Maggiore o uguale</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> è maggiore o uguale a <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &lt;=&gt; $b</td>
     <td>Spaceship</td>
     <td>
      Un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> minore di, uguale a, o maggiore di zero quando
      <var class="varname">$a</var> è minore di, uguale a, o maggiore di
      <var class="varname">$b</var>.
     </td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  Se entrambi gli operandi sono
  <a href="language.types.numeric-strings.php" class="link">stringhe numeriche</a>
  o un operando è un numero e l&#039;altro è una
  <a href="language.types.numeric-strings.php" class="link">stringa numerica</a>,
  quindi il confronto viene eseguito numericamente.
  Queste regole si applicano anche all&#039;
  istruzione <a href="control-structures.switch.php" class="link">switch</a>.
  La conversione del tipo non ha luogo quando il confronto è
  <code class="literal">===</code> o <code class="literal">!==</code> poiché implica
  il confronto del tipo e del valore.
 </p>
 
 <div class="warning"><strong class="warning">Avviso</strong>
  <p class="para">
   Prima di PHP 8.0.0, se una <span class="type">stringa</span> veniva confrontata con un numero
   o una stringa numerica, la <span class="type">stringa</span> veniva convertita in un
   numero prima di eseguire il confronto. Questo può portare a risultati
   sorprendenti, come si può vedere con il seguente esempio:
   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive 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">0 </span><span style="color: #007700">== </span><span style="color: #DD0000">"a"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"1" </span><span style="color: #007700">== </span><span style="color: #DD0000">"01"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"10" </span><span style="color: #007700">== </span><span style="color: #DD0000">"1e1"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">100 </span><span style="color: #007700">== </span><span style="color: #DD0000">"1e2"</span><span style="color: #007700">);<br /><br />switch (</span><span style="color: #DD0000">"a"</span><span style="color: #007700">) {<br />case </span><span style="color: #0000BB">0</span><span style="color: #007700">:<br />  echo </span><span style="color: #DD0000">"0"</span><span style="color: #007700">;<br />  break;<br />case </span><span style="color: #DD0000">"a"</span><span style="color: #007700">:<br />  echo </span><span style="color: #DD0000">"a"</span><span style="color: #007700">;<br />  break;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <p class="para">Output of the above example in PHP 7:</p>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
bool(true)
bool(true)
bool(true)
bool(true)
0
</pre></div>
    </div>
    <p class="para">Output of the above example in PHP 8:</p>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
bool(false)
bool(true)
bool(true)
bool(true)
a
</pre></div>
    </div>      
   </div>
  </p>
 </div>

 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive 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 float<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 /> <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">"aa"</span><span style="color: #007700">; </span><span style="color: #FF8000">// -1<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"zz" </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #DD0000">"aa"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /> <br />// Array<br /></span><span style="color: #007700">echo [] &lt;=&gt; []; </span><span style="color: #FF8000">// 0<br /></span><span style="color: #007700">echo [</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">] &lt;=&gt; [</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: #FF8000">// 0<br /></span><span style="color: #007700">echo [</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">] &lt;=&gt; []; </span><span style="color: #FF8000">// 1<br /></span><span style="color: #007700">echo [</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">] &lt;=&gt; [</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">1</span><span style="color: #007700">]; </span><span style="color: #FF8000">// 1<br /></span><span style="color: #007700">echo [</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">] &lt;=&gt; [</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">4</span><span style="color: #007700">]; </span><span style="color: #FF8000">// -1<br /> <br />// Oggetti<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">]; <br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">]; <br />echo </span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">$b</span><span style="color: #007700">; </span><span style="color: #FF8000">// 0<br /> <br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">]; <br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"c"</span><span style="color: #007700">]; <br />echo </span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">$b</span><span style="color: #007700">; </span><span style="color: #FF8000">// -1<br /> <br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"c"</span><span style="color: #007700">]; <br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">]; <br />echo </span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">$b</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /> <br />// non vengono confrontati solo i valori; le chiavi devono corrispondere<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">]; <br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= (object) [</span><span style="color: #DD0000">"b" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">]; <br />echo </span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">$b</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    
   </div>

  </div>
 </p>

 <p class="para">
  Se i tipi di operandi utilizzati differiscono, il confronto viene svolto
  nell&#039;ordine indicato della seguente tabella.
 </p>
 <table id="language.operators.comparison.types" class="doctable table">
  <caption><strong>Confronti con differenti tipi</strong></caption>
  
   <thead>
    <tr>
     <th>Tipo dell&#039;operando 1</th>
     <th>Tipo dell&#039;operando 2</th>
     <th>Risultato</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td><span class="type"><a href="language.types.null.php" class="type null">null</a></span> oppure <span class="type"><a href="language.types.string.php" class="type string">string</a></span></td>
     <td><span class="type"><a href="language.types.string.php" class="type string">string</a></span></td>
     <td>Si converte <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> in &quot;&quot;, confronto numerico o lessicale</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> oppure <span class="type"><a href="language.types.null.php" class="type null">null</a></span></td>
     <td>qualsiasi</td>
     <td>Converte entrambi i lati in <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>, <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> &lt; <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span></td>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span></td>
     <td>Le classi predefinite possono avere la propria funzione di confronto, classi differenti
      non sono confrontabili, per la stessa classe vedere <a href="language.oop5.object-comparison.php" class="link">Confronto di Oggetti</a>.
     </td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.string.php" class="type string">string</a></span>, <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>, <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> oppure <span class="type"><a href="language.types.float.php" class="type float">float</a></span></td>
     <td><span class="type"><a href="language.types.string.php" class="type string">string</a></span>, <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>, <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> oppure <span class="type"><a href="language.types.float.php" class="type float">float</a></span></td>
     <td>Stringhe e risorse sono converti in numeri, confronto matematico</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span></td>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span></td>
     <td>La matrice con meno membri è più piccola, se la chiave dell&#039;operando 1 non si
      trova nell&#039;operando 2 allora le matrici non si possono confrontare, in altri casi
      il confronto avviene valore per valore (vedere l&#039;esempio seguente)</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span></td>
     <td>qualsiasi</td>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span> è sempre più grande</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span></td>
     <td>qualsiasi</td>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span> è sempre più grande</td>
    </tr>

   </tbody>
  
 </table>

 
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Example #1 Confronto Boolean/null</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Bool e null sono confrontati sempre come bool<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">1 </span><span style="color: #007700">== </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">);  </span><span style="color: #FF8000">// TRUE - uguale a (bool)1 == TRUE<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">0 </span><span style="color: #007700">== </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">); </span><span style="color: #FF8000">// TRUE - uguale a (bool)0 == FALSE<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">100 </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">); </span><span style="color: #FF8000">// FALSE - uguale a (bool)100 &lt; TRUE<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(-</span><span style="color: #0000BB">10 </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">);</span><span style="color: #FF8000">// FALSE - uguale a (bool)-10 &lt; FALSE<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">min</span><span style="color: #007700">(-</span><span style="color: #0000BB">100</span><span style="color: #007700">, -</span><span style="color: #0000BB">10</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">10</span><span style="color: #007700">, </span><span style="color: #0000BB">100</span><span style="color: #007700">)); </span><span style="color: #FF8000">// NULL - (bool)NULL &lt; (bool)-100 è FALSE &lt; TRUE<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>

 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Example #2 Trascrizione del confronto standard tra matrici</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Gli array vengono confrontati in questo modo con gli operatori di confronto standard e con l'operatore spaceship.<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">standard_array_compare</span><span style="color: #007700">(</span><span style="color: #0000BB">$op1</span><span style="color: #007700">, </span><span style="color: #0000BB">$op2</span><span style="color: #007700">)<br />{<br />  if (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op1</span><span style="color: #007700">) &lt; </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op2</span><span style="color: #007700">)) {<br />      return -</span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// $op1 &lt; $op2<br />  </span><span style="color: #007700">} elseif (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op1</span><span style="color: #007700">) &gt; </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op2</span><span style="color: #007700">)) {<br />      return </span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// $op1 &gt; $op2<br />  </span><span style="color: #007700">}<br />  foreach (</span><span style="color: #0000BB">$op1 </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br />      if (!</span><span style="color: #0000BB">array_key_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$key</span><span style="color: #007700">, </span><span style="color: #0000BB">$op2</span><span style="color: #007700">)) {<br />          return </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />      } elseif (</span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">$op2</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]) {<br />          return -</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />      } elseif (</span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">$op2</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]) {<br />          return </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />      }<br />  }<br />  return </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #FF8000">// $op1 == $op2<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>

 <div class="warning"><strong class="warning">Avviso</strong>
  <h1 class="title">Confronto di numeri in virgola mobile</h1>

  <p class="para">
   A causa del modo in cui i <span class="type"><a href="language.types.float.php" class="type float">float</a></span> sono rappresentati internamente al PHP, non
   si dovrebbe esaminare l&#039;eguaglianza di due <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
  </p>

  <p class="para">
   Per maggior informazioni, fare riferimento alla documentazione del tipo <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
  </p>
 </div>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span class="simpara">
   Tenere presente che la manipolazione dei tipi di PHP non è sempre ovvia quando si confrontano valori di tipi diversi,
   in particolare confrontando <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> con <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> o <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> con <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. È quindi generalmente
   consigliabile utilizzare confronti <code class="literal">===</code> e <code class="literal">!==</code> piuttosto che
   <code class="literal">==</code> e <code class="literal">!=</code> nella maggior parte dei casi.
  </span>
 </p></blockquote>

 <div class="sect2" id="language.operators.comparison.incomparable">
  <h3 class="title">Incomparable Values</h3>
  <p class="simpara">
   Mentre il confronto di identità (<code class="literal">===</code> e <code class="literal">!==</code>)
   può essere applicato a valori arbitrari, gli altri operatori di confronto dovrebbero essere applicati
   solo a valori comparabili. Il risultato del confronto di valori incomparabili non
   è definito e non dovrebbe essere considerato attendibile.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Vedere anche:</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.strcasecmp.php" class="function">strcasecmp()</a></span></li>
    <li><span class="function"><a href="function.strcmp.php" class="function">strcmp()</a></span></li>
    <li><a href="language.operators.array.php" class="link">Operatori degli array</a></li>
    <li><a href="language.types.php" class="link">Tipi</a></li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="language.operators.comparison.ternary">
  <h3 class="title">Operatore ternario</h3>
  <p class="para">
   Un altro operatore condizionale è l&#039;operatore ternario &quot;?:&quot;.
   <div class="example" id="example-3">
    <p><strong>Example #3 Assegnazione di un valore di default</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Esempio di utilizzo dell'operatore ternario<br /></span><span style="color: #0000BB">$action </span><span style="color: #007700">= (empty(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">])) ? </span><span style="color: #DD0000">'default' </span><span style="color: #007700">: </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// La riga precedente è simile a<br /></span><span style="color: #007700">if (empty(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">])) {<br />  </span><span style="color: #0000BB">$action </span><span style="color: #007700">= </span><span style="color: #DD0000">'default'</span><span style="color: #007700">;<br />} else {<br />  </span><span style="color: #0000BB">$action </span><span style="color: #007700">= </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   L&#039;espressione <code class="literal">(espressione1) ? (espressione2) : (espressione3)</code>
   vale <span class="replaceable">espressione2</span> se
   <span class="replaceable">espressione1</span> è <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, e
   <span class="replaceable">espressione3</span> se
   <span class="replaceable">espressione1</span> è <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <p class="para">
   È possibile tralasciare l&#039;elemento centrale dell&#039;operatore ternario.
   L&#039;espressione <code class="literal">espressione1 ?: espressione3</code> viene valutata
   al risultato di <span class="replaceable">espressione1</span> se <span class="replaceable">espressione1</span>
   viene valutata <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, e <span class="replaceable">espressione3</span> in caso contrario.
   <span class="replaceable">espressione1</span> viene valutata solo una volta.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Si noti che l&#039;operatore ternario è un&#039;espressione, e non viene valutato
    come variabile, ma come risultato di un&#039;espressione. Questo
    è importante da sapere nel caso si desideri restituire una variabile per riferimento.
    La riga <code class="literal">return $var == 42 ? $a : $b;</code> in una funzione
    che restituisce per riferimento non funzionerà e genererà un
    avvertimento.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Si raccomanda di evitare di &quot;sovrapporre&quot; espressioni ternarie.
    Il comportamento di PHP quando si utilizza più di un operatore ternario senza parentesi all&#039;interno di una singola
    espressione non è ovvio rispetto ad altri linguaggi.
    In effetti, prima di PHP 8.0.0, le espressioni ternarie venivano valutate associative a sinistra,
    anziché associative a destra come la maggior parte degli altri linguaggi di programmazione.
    Fare affidamento sull&#039;associatività di sinistra è deprecato a partire da PHP 7.4.0.
    A partire da PHP 8.0.0, l&#039;operatore ternario non è associativo.
    <div class="example" id="example-4">
     <p><strong>Example #4 Comportamento ternario non ovvio</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// a prima vista, questa istruzione dovrebbe restituire 'true'<br /></span><span style="color: #007700">echo (</span><span style="color: #0000BB">true </span><span style="color: #007700">? </span><span style="color: #DD0000">'true' </span><span style="color: #007700">: </span><span style="color: #0000BB">false </span><span style="color: #007700">? </span><span style="color: #DD0000">'t' </span><span style="color: #007700">: </span><span style="color: #DD0000">'f'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// invece, l'output effettivo di quanto sopra è 't' prima di PHP 8.0.0<br />// questo perché le espressioni ternarie sono associative a sinistra<br /><br />// quanti segue è una versione più chiara dello stesso codice<br /></span><span style="color: #007700">echo ((</span><span style="color: #0000BB">true </span><span style="color: #007700">? </span><span style="color: #DD0000">'true' </span><span style="color: #007700">: </span><span style="color: #0000BB">false</span><span style="color: #007700">) ? </span><span style="color: #DD0000">'t' </span><span style="color: #007700">: </span><span style="color: #DD0000">'f'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// qui, si può notare che la prima espressione viene valutata come "true", che<br />// a sua volta diventa (bool)true, e quindi restituisce il ramo true della<br />// seconda espressione ternaria.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Il concatenamento di ternari brevi (<code class="literal">?:</code>), tuttavia, è stabile e si comporta in modo ragionevole.
    Verrà valutato al primo argomento valutato come valore non falso. Si noti che i valori non
    definiti genereranno comunque un avviso.
    <div class="example" id="example-5">
     <p><strong>Example #5 Concatenamento ternario breve</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">0 </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">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">//1<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">0 </span><span style="color: #007700">?: </span><span style="color: #0000BB">0 </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">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">//2<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">0 </span><span style="color: #007700">?: </span><span style="color: #0000BB">0 </span><span style="color: #007700">?: </span><span style="color: #0000BB">0 </span><span style="color: #007700">?: </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">//3<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>
 </div>
 
 <div class="sect2" id="language.operators.comparison.coalesce">
  <h3 class="title">L&#039;operatore Null Coalescing</h3>
  <p class="para">
   Un altro utile operatore abbreviato è il &quot;??&quot; (o null coalescing).
   <div class="example" id="example-6">
    <p><strong>Example #6 Assegnazione di un valore predefinito</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Esempio di utilizzo per: Operatore Null Coalesce<br /></span><span style="color: #0000BB">$action </span><span style="color: #007700">= </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">] ?? </span><span style="color: #DD0000">'default'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Quello sopra è identico a questa istruzione if/else<br /></span><span style="color: #007700">if (isset(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">])) {<br />  </span><span style="color: #0000BB">$action </span><span style="color: #007700">= </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">];<br />} else {<br />  </span><span style="color: #0000BB">$action </span><span style="color: #007700">= </span><span style="color: #DD0000">'default'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   L&#039;espressione <code class="literal">(expr1) ?? (expr2)</code> viene valutata a
   <span class="replaceable">expr2</span> se <span class="replaceable">expr1</span> è
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, e <span class="replaceable">expr1</span> in caso contrario.
  </p>
  <p class="para">
   In particolare, questo operatore non emette un avviso o un avvertimento se il valore del lato
   sinistro non esiste, proprio come <span class="function"><a href="function.isset.php" class="function">isset()</a></span>. Questo è particolarmente
   utile sulle chiavi degli array.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Si prega di notare che l&#039;operatore null coalescing è un&#039;espressione, e che essa
    non viene valutata ad una variabile, ma al risultato di un&#039;espressione. Questo
    è importante da sapere nel caso in cui si volesse restituire una variabile per riferimento.
    L&#039;istruzione <code class="literal">return $foo ?? $bar;</code> in una funzione
    che restituisce un riferimento quindi non funzionerà e verrà emesso un
    avviso.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    L&#039;operatore null coalescing ha una precedenza bassa. Ciò significa che se lo si mescola
    con altri operatori (come la concatenazione di stringhe o gli operatori aritmetici)
    saranno probabilmente necessarie parentesi.
   </p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Genera un avviso che $name non è definito.<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">'Mr. ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$name </span><span style="color: #007700">?? </span><span style="color: #DD0000">'Anonymous'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Stampa "Mr. Anonymous"<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">'Mr. ' </span><span style="color: #007700">. (</span><span style="color: #0000BB">$name </span><span style="color: #007700">?? </span><span style="color: #DD0000">'Anonymous'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Si prega di notare che l&#039;operatore null coalescing permette semplici nidificazioni:
    <div class="example" id="example-7">
     <p><strong>Example #7 Operatore null coalescing nidificato</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$foo </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$baz </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$qux </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$foo </span><span style="color: #007700">?? </span><span style="color: #0000BB">$bar </span><span style="color: #007700">?? </span><span style="color: #0000BB">$baz </span><span style="color: #007700">?? </span><span style="color: #0000BB">$qux</span><span style="color: #007700">; </span><span style="color: #FF8000">// stampa 1<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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