<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Compara&ccedil;&atilde;o',
    2 => 'Operadores de Compara&ccedil;&atilde;o',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operadores',
  ),
  'prev' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bin&aacute;rios',
  ),
  'next' => 
  array (
    0 => 'language.operators.errorcontrol.php',
    1 => 'Controle de Erro',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Operadores de Comparação</h2>
 
 <p class="simpara">
  Operadores de comparação, como os seus nomes implicam, permitem que você
  compare dois valores. Você pode se interessar em ver
  <a href="types.comparisons.php" class="link">as tabelas de comparação de tipos</a>,
  que tem exemplo das várias comparações entre tipos relacionadas.
 </p>
 <table class="doctable table">
  <caption><strong>Operadores de comparação</strong></caption>
  
   <thead>
    <tr>
     <th>Exemplo</th>
     <th>Nome</th>
     <th>Resultado</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td>$a == $b</td>
     <td>Igual</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> é igual a <var class="varname">$b</var> após equalização de tipos.</td>
    </tr>

    <tr>
     <td>$a === $b</td>
     <td>Idêntico</td>
     <td>
      <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> é igual a <var class="varname">$b</var>, e eles são do mesmo
      tipo.
     </td>
    </tr>

    <tr>
     <td>$a != $b</td>
     <td>Diferente</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> não é igual a <var class="varname">$b</var> depois de equalização de ativos.</td>
    </tr>

    <tr>
     <td>$a &lt;&gt; $b</td>
     <td>Diferente</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> não é igual a <var class="varname">$b</var> depois de equalização de ativos.</td>
    </tr>

    <tr>
     <td>$a !== $b</td>
     <td>Não idêntico</td>
     <td>
      <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> não é igual a <var class="varname">$b</var>, ou eles não são do mesmo
      tipo.
     </td>
    </tr>

    <tr>
     <td>$a &lt; $b</td>
     <td>Menor que</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> é estritamente menor que <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &gt; $b</td>
     <td>Maior que</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> é estritamente maior que <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &lt;= $b</td>
     <td>Menor ou igual</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> é menor ou igual a <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &gt;= $b</td>
     <td>Maior ou igual</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se <var class="varname">$a</var> é maior ou igual a <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &lt;=&gt; $b</td>
     <td>Spaceship (nave espacial)</td>
     <td>
      Um <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> menor que, igual a ou maior que zero quando
      <var class="varname">$a</var> é, respectivamente, menor que, igual a ou maior
      que <var class="varname">$b</var>.
     </td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  Se ambos os operadores são
  <a href="language.types.numeric-strings.php" class="link">strings numéricas</a>,
  ou um operando é um número e o outro é uma
  <a href="language.types.numeric-strings.php" class="link">string numérica</a>,
  então a comparação é realizada numericamente.
  Estas regras se aplicam à instrução
  <a href="control-structures.switch.php" class="link">switch</a>.
  A conversão de tipos não é realizada quando a comparação é realizada através
  <code class="literal">===</code> ou <code class="literal">!==</code> porque aqui
  é realizada a comparação de tipos, além de valores.
 </p>

 <div class="warning"><strong class="warning">Aviso</strong>
  <p class="para">
   Anteriormente ao PHP 8.0.0, se uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> era comparada a um número
   ou uma string numérica, então a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> era convertida para
   número antes de realizar a comparação. Isto pode levar a resultados
   inesperados, como observado no exemplo a seguir:
   <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">Saída do exemplo acima no 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">Saída do exemplo acima no 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="example" id="example-1">
   <p><strong>Exemplo #1 Operadores de Comparação</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">// Inteiros<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: #DD0000">' '</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: #DD0000">' '</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: #DD0000">' '</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /><br />// Floats<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: #DD0000">' '</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: #DD0000">' '</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: #DD0000">' '</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /><br />// Strings<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: #DD0000">' '</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: #DD0000">' '</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: #DD0000">' '</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: #DD0000">' '</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: #DD0000">' '</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /><br />// Arrays<br /></span><span style="color: #007700">echo [] &lt;=&gt; [], </span><span style="color: #DD0000">' '</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: #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: #DD0000">' '</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: #DD0000">' '</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">1</span><span style="color: #007700">], </span><span style="color: #DD0000">' '</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: #DD0000">' '</span><span style="color: #007700">; </span><span style="color: #FF8000">// -1<br /><br />// Objetos<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: #DD0000">' '</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: #DD0000">' '</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: #DD0000">' '</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /><br />// valores e tipos precisam coincidir<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: #DD0000">' '</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">
  Para vários tipos, comparações são feitas de acordo com a seguinte
  tabela (em ordem).
 </p>
 <table id="language.operators.comparison.types" class="doctable table">
  <caption><strong>Comparação com vários tipos</strong></caption>
  
   <thead>
    <tr>
     <th>Tipo do 1º operando</th>
     <th>Tipo do 2º operando</th>
     <th>Resultado</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td><span class="type"><a href="language.types.null.php" class="type null">null</a></span> ou <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>Converte <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> para &quot;&quot;, numérico ou comparação léxica</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> ou <span class="type"><a href="language.types.null.php" class="type null">null</a></span></td>
     <td>qualquer</td>
     <td>Converte para <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>Classes nativas podem definir suas próprias comparações, classes diferentes
      são incomparáveis, same class see <a href="language.oop5.object-comparison.php" class="link">Comparação de Objetos</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> ou <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> ou <span class="type"><a href="language.types.float.php" class="type float">float</a></span></td>
     <td>Transforma strings e resources para números</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>Array com menos membros é menor, se a chave do operando 1 não é
      encontrada no operando 2, então os arrays são incomparáveis, caso contrário compara
      valor por valor (veja o seguinte exemplo)</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span></td>
     <td>qualquer</td>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span> é sempre maior</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span></td>
     <td>qualquer</td>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span> é sempre maior</td>
    </tr>

   </tbody>
  
 </table>


 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Exemplo #2 Comparações de boolean e 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 são sempre comparados como booleanos<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 - o mesmo que (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 - o mesmo que (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 - o mesmo que (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 - o mesmo que (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-3">
   <p><strong>Exemplo #3 Transcrição do padrão de comparação de array</strong></p>
   <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Arrays são comparados assim quando utilizando-se os operadores padrão e operador nave-espacial<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">Aviso</strong>
  <h1 class="title">Comparison of floating point numbers</h1>

  <p class="para">
   Por conta da forma que <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s são representados internamente não
   se deve testar dois <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s com o comparador de igualdade.
  </p>

  <p class="para">
   Veja a documentação de <span class="type"><a href="language.types.float.php" class="type float">float</a></span> para mais detalhes.
  </p>
 </div>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span class="simpara">
   Cuidado. A conversão automática de tipos do PHP não é sempre tão óbvia, quando comparando valores de tipos diferentes,
   particularmente comparando <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>s para <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>s ou <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>s para <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s. No geral é
   recomendado utilizar as comparações <code class="literal">===</code> e <code class="literal">!==</code> em vez de utilizar
   <code class="literal">==</code> e <code class="literal">!=</code> na maioria dos casos.
  </span>
 </p></blockquote>

 <div class="sect2" id="language.operators.comparison.incomparable">
  <h3 class="title">Valores não comparáveis</h3>
  <p class="simpara">
   Embora a comparação de identidade (<code class="literal">===</code> e <code class="literal">!==</code>)
   possa ser aplicada para valores arbitrários, os outros operadores de comparação somente devem
   ser aplicados a valores comparáveis. O resultado de comparação de valores não comparáveis
   não é definido, e não pode ser garantido.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Veja Também</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">Array operators</a></li>
    <li><a href="language.types.php" class="link">Types</a></li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="language.operators.comparison.ternary">
  <h3 class="title">Operador Ternário</h3>
  <p class="para">
   Outro operador condicional é o operador &quot;?:&quot; (ou ternário).
   <div class="example" id="example-4">
    <p><strong>Exemplo #4 Atribuindo um valor padrão</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">// Example usage for: Ternary Operator<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">// O código acima é idêntico a esta instrução if/else<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>
   A expressão <code class="literal">(expr1) ? (expr2) : (expr3)</code>
   é avaliada para <span class="replaceable">expr2</span> se
   <span class="replaceable">expr1</span> é avaliada como <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, ou
   <span class="replaceable">expr3</span> se
   <span class="replaceable">expr1</span> é avaliada como <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <p class="para">
   É possível deixar vazia a parte central do operador ternário.
   A expressão <code class="literal">expr1 ?: expr3</code> retorna
   o resultado de <span class="replaceable">expr1</span> se <span class="replaceable">expr1</span>
   avaliar para <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, e <span class="replaceable">expr3</span> se não.
   <span class="replaceable">expr1</span> somente é avaliada nessa única situação.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Note que o operador ternário é uma expressão, e ele não é
    avaliado para uma variável, mas para o resultado de uma expressão. Isto é
    importante saber se você quer retornar uma variável por referência.
    A declaração <code class="literal">return $var == 42 ? $a : $b;</code> em uma
    função que retorna por referência conseqüêntemente não irá funcionar e será
    avisado.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    É recomendado evitar empilhar operadores ternários.
    O comportamento do PHP quando utilizando mais de um operador ternário sem parênteses numa única
    expressão é menos óbvia, comparada a outras linguagens.
    Antes do PHP 8.0.0, os operadores ternários eram avaliados com associatividade à esquerda,
    em vez de associatividade à direita, como na maioria de outras linguagens.
    Depender da associatividade à esquerda foi descontinuado a partir do PHP 7.4.0.
    A partir do PHP 8.0.0, o operador ternário é não associativo.
    <div class="example" id="example-5">
     <p><strong>Exemplo #5 Comportamento não óbvio do ternário</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">// Pode parecer que a expressão a seguir imprime '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">// No entanto, a saída é na verdade 't' antes do PHP 8.0.0<br />// Isto ocorre porque operadores ternários são associativos à esquerda<br /><br />// O seguinte é a versão mais intuitiva do código acima<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">// Aqui, é possível ver que a primeira expressão avalia para 'true', e então<br />// é avaliada para (bool) true, e portanto retorna o variante true da<br />// segunda expressão ternária<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">
    Encadeamento de ternários curtos (<code class="literal">?:</code>), é estável, e comporta-se intuitivamente.
    Ele avaliará como o primeiro argumento que avalia para uma valor não falso. Observe que valores
    não definidos irão emitir um alerta.
    <div class="example" id="example-6">
     <p><strong>Exemplo #6 Encadeamento de ternários curtos</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">Operador de aglutinação null (Null Coalescing)</h3>
  <p class="para">
   Existe ainda o operador &quot;??&quot; (ou null coalescing).
   <div class="example" id="example-7">
    <p><strong>Exemplo #7 Atribuindo um valor padrão</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">// Exemplo do operador 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">// O conteúdo acima é idêntico à essa declaração 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>
   A expressão <code class="literal">(expr1) ?? (expr2)</code> é avaliada para
   <span class="replaceable">expr2</span> se <span class="replaceable">expr1</span> for
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, e <span class="replaceable">expr1</span> do contrário.
  </p>
  <p class="para">
   Esse operador em particular não emite aviso caso o valor da esquerda
   não exista, assim como <span class="function"><a href="function.isset.php" class="function">isset()</a></span>. Sendo especialmente
   útil em chaves de arrays.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Note que o operador null coalescing é uma expressão, e ele
    não é avaliado para uma variável, mas para o resultado de uma expressão. Isto
    é importante saber se você quer retornar uma variável por referência.
    A declaração <code class="literal">return $foo ?? $bar;</code> em uma
    função que retorna por referência conseqüêntemente não irá funcionar e será
    avisado.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    O operador de aglutinação null tem baixa precedência. Isso significa que misturá-lo
    com outros operadores (como por exemplo concatenação ou aritmética)
    irá provavelmente exigir parênteses.
   </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">// Emite um aviso que $name não está definido.<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">// Exibe "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">
    Note que o operador null coalescing permite a criação de aninhamentos simples:
    <div class="example" id="example-8">
     <p><strong>Exemplo #8 Aninhando o operador null coalescing</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">// exibe 1<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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