<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Comparaci&oacute;n',
    2 => 'Operadores de comparaci&oacute;n',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Los operadores',
  ),
  'prev' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bitwise',
  ),
  'next' => 
  array (
    0 => 'language.operators.errorcontrol.php',
    1 => 'Control de errores',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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 comparación</h2>
 
 <p class="simpara">
  Los operadores de comparación, como su nombre indica,
  permiten comparar dos valores. También se debe estar interesado por las
  <a href="types.comparisons.php" class="link">tablas de comparaciones de tipos</a>,
  ya que muestran ejemplos de muchos tipos de comparaciones.
 </p>
 <table class="doctable table">
  <caption><strong>Operadores de comparación</strong></caption>
  
   <thead>
    <tr>
     <th>Ejemplo</th>
     <th>Nombre</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> si <var class="varname">$a</var> es igual a
      <var class="varname">$b</var> después del transtipado.</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> si <var class="varname">$a</var> es igual a <var class="varname">$b</var> y
      son del mismo 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> si <var class="varname">$a</var> es diferente de
      <var class="varname">$b</var> después del transtipado.</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> si <var class="varname">$a</var> es diferente de
      <var class="varname">$b</var> después del transtipado.</td>
    </tr>

    <tr>
     <td>$a !== $b</td>
     <td>Diferente</td>
     <td>
      <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> es diferente de <var class="varname">$b</var>
      o bien si no son del mismo 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> si <var class="varname">$a</var> es estrictamente menor que
      <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &gt; $b</td>
     <td>Mayor</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> es estrictamente mayor que
      <var class="varname">$b</var>.</td>
    </tr>

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

    <tr>
     <td>$a &gt;= $b</td>
     <td>Mayor o igual</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> es mayor o igual a
      <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &lt;=&gt; $b</td>
     <td>Combinado</td>
     <td>
      Un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> menor, igual o mayor a cero cuando
      <var class="varname">$a</var> es menor, igual, o mayor a
      <var class="varname">$b</var> respectivamente.
     </td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  Si los dos operandos son
  <a href="language.types.numeric-strings.php" class="link">strings numéricos</a>,
  o si un operando es un número y el otro es un
  <a href="language.types.numeric-strings.php" class="link">string numérico</a>,
  entonces la comparación se efectuará numéricamente.
  Estas reglas también se aplican a la instrucción
  <a href="control-structures.switch.php" class="link">switch</a>.
  La conversión de tipo no interviene cuando la comparación es
  <code class="literal">===</code> o <code class="literal">!==</code>
  ya que esto implica tanto una comparación de tipo como de valor.
 </p>

 <div class="warning"><strong class="warning">Advertencia</strong>
  <p class="para">
   Antes de PHP 8.0.0, si un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> es comparado a un número
   o a un string numérico, entonces el <span class="type"><a href="language.types.string.php" class="type string">string</a></span> será convertido en un
   número antes de efectuar la comparación. Esto puede llevar a resultados
   sorprendentes como se puede ver en el siguiente ejemplo:
   <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">Resultado del ejemplo anterior en 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">Resultado del ejemplo anterior en 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>Ejemplo #1 Operadores de comparación</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">// Enteros<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 />// Números flotantes<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 />// No solo las valores son comparados; las claves deben 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 los diferentes tipos, la comparación se realiza siguiendo
  la tabla siguiente (en orden).
 </p>
 <table id="language.operators.comparison.types" class="doctable table">
  <caption><strong>Comparación con múltiples tipos</strong></caption>
  
   <thead>
    <tr>
     <th>Tipo del operando 1</th>
     <th>Tipo del operando 2</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> o <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>Convierte <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> en &quot;&quot;, comparación numérica o léxica</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> o <span class="type"><a href="language.types.null.php" class="type null">null</a></span></td>
     <td>Cualquier cosa</td>
     <td>Convierte en <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>Las clases internas pueden definir su propio método de
      comparación; diferentes clases son incomparables; entre objetos
      de la misma clase ver <a href="language.oop5.object-comparison.php" class="link">Comparación 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> o <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> o <span class="type"><a href="language.types.float.php" class="type float">float</a></span>
     </td>
     <td>
      Transforma los strings y los recursos en 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>El array con menos miembros es menor, si la clave del operando 1 no es encontrada en el operando 2, entonces los arrays son incomparables, de lo contrario la comparación se realiza valor por valor (ver el siguiente ejemplo)
     </td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span></td>
     <td>Cualquier cosa</td>
     <td>El <span class="type"><a href="language.types.object.php" class="type object">object</a></span> es siempre mayor</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span></td>
     <td>Cualquier cosa</td>
     <td>El <span class="type"><a href="language.types.array.php" class="type array">array</a></span> es siempre mayor</td>
    </tr>

   </tbody>
  
 </table>


 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 Comparación Booléen/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éen y null siempre son comparados como booléans<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 - idéntico 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 - idéntico 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 - idéntico 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 - idéntico 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 es idéntico a 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>Ejemplo #3 Transcripción de las comparaciones estándar de arrays</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">// Los arrays son comparados de esta manera con los operadores estándar de comparación y el operador combinado<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">Advertencia</strong>
  <h1 class="title">Comparación de números de punto flotante</h1>

  <p class="para">
   Debido a la forma en que los <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s son representados
   internamente, no se debe probar la igualdad entre dos números de tipo
   <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
  </p>

  <p class="para">
   Ver la documentación de <span class="type"><a href="language.types.float.php" class="type float">float</a></span> para más información.
  </p>
 </div>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span class="simpara">
   Tenga en cuenta que la manipulación de tipos no siempre es evidente al comparar
   valores de diferentes tipos, en particular al comparar <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>s con <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>s o
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>s con <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s. Por lo tanto, generalmente se recomienda utilizar los
   operadores de comparación <code class="literal">===</code> y <code class="literal">!==</code> en lugar de
   <code class="literal">==</code> y <code class="literal">!=</code> en la mayoría de los casos.
  </span>
 </p></blockquote>

 <div class="sect2" id="language.operators.comparison.incomparable">
  <h3 class="title">Valores incomparables</h3>
  <p class="simpara">
   Mientras que las comparaciones de identidad (<code class="literal">===</code> y <code class="literal">!==</code>)
   pueden ser aplicadas a valores arbitrarios, los otros operadores de
   comparación solo deben ser aplicados a valores comparables.
   El resultado de la comparación de valores incomparables es indefinido,
   y no debe ser utilizado.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Ver también</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">operador de arrays</a></li>
    <li><a href="language.types.php" class="link">Tipos</a></li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="language.operators.comparison.ternary">
  <h3 class="title">El operador ternario</h3>
  <p class="para">
   Otro operador condicional es el operador
   ternario (&quot;?:&quot;).
   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Asignación de un valor por defecto</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">// Ejemplo de uso para el operador 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 línea anterior es idéntica a la siguiente condición:<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>
   La expresión <code class="literal">(expr1) ? (expr2) : (expr3)</code>
   se evalúa a <span class="replaceable">expr2</span> si
   <span class="replaceable">expr1</span> se evalúa a <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, y
   <span class="replaceable">expr3</span> si
   <span class="replaceable">expr1</span> se evalúa a <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <p class="para">
   Es posible omitir la parte central del operador ternario.
   La expresión <code class="literal">expr1 ?: expr3</code> evalúa el resultado de
   <span class="replaceable">expr1</span> si <span class="replaceable">expr1</span>
   vale <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, y <span class="replaceable">expr3</span> en caso contrario.
   <span class="replaceable">expr1</span> solo se evalúa una vez en este caso.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Tenga en cuenta que el operador ternario es una expresión, y no
    se evalúa como una variable, sino como el resultado de la expresión.
    Es importante saberlo si se desea devolver una variable
    por referencia. La instrucción
    <code class="literal">return $var == 42 ? $a : $b;</code>
    en una función devuelta por referencia no funcionará y se emitirá una alerta.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Se recomienda no &quot;apilar&quot; las expresiones ternarias.
    El comportamiento de PHP al utilizar varios operadores
    ternarios que no están entre paréntesis en una única expresión es
    no evidente en comparación con otros lenguajes.
    Anteriormente a PHP 8.0.0, el operador ternario se evaluaba
    de izquierda a derecha, en lugar de derecha a izquierda como la mayoría de
    los otros lenguajes de programación.
    Dependiendo de la asociatividad a la izquierda es obsoleto a partir de PHP 7.4.0.
    A partir de PHP 8.0.0, el operador ternario no es asociativo.
    <div class="example" id="example-5">
     <p><strong>Ejemplo #5 Comportamiento de PHP</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 primera vista, lo siguiente debería devolver '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">// sin embargo, la expresión anterior devolverá 't' antes de PHP 8.0.0<br />// porque el operador ternario es de izquierda a derecha<br /><br />// la siguiente expresión es una versión más evidente del mismo código<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">// aquí, se puede observar que la primera expresión se evalúa a 'true',<br />// lo que hace que se evalúe a (bool)true, lo que devuelve la rama<br />// 'verdadera' de la segunda expresión 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">
    La combinación de ternario corto (<code class="literal">?:</code>), sin embargo, es estable y se comporta de manera razonable.
    Esto evaluará el primer argumento que evalúa a un valor no-falsy.
    Tenga en cuenta que los valores indefinidos siempre emitirán un aviso.
    <div class="example" id="example-6">
     <p><strong>Ejemplo #6 Combinación de ternario corto</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 fusión Null</h3>
  <p class="para">
   Otro operador corto útil es el operador &quot;??&quot; (o fusión null).
   <div class="example" id="example-7">
    <p><strong>Ejemplo #7 Asignar un valor por defecto</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">// Ejemplo de uso para: Operador de fusión Null<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">// el código anterior es equivalente a la siguiente estructura 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>
   La expresión <code class="literal">(expr1) ?? (expr2)</code> devuelve
   <span class="replaceable">expr2</span> si <span class="replaceable">expr1</span> es
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, y <span class="replaceable">expr1</span> en los otros casos.
  </p>
  <p class="para">
   En particular, este operador no emite una notificación o advertencia si
   la parte izquierda no existe, exactamente como <span class="function"><a href="function.isset.php" class="function">isset()</a></span>.
   Esto es especialmente útil para las claves de los arrays.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Tenga en cuenta que el operador de fusión null es una expresión, y que
    no se evalúa como una variable, sino como el resultado de una expresión.
    Es importante saberlo si se desea devolver una variable
    por referencia.
    La expresión <code class="literal">return $foo ?? $bar;</code> es un retorno por
    referencia que no funciona y emite una advertencia.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    El operador de fusión null tiene una precedencia baja. Esto significa que al mezclarlo
    con otros operadores (como la concatenación de strings o los operadores
    aritméticos) se requerirán paréntesis.
   </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 una advertencia de que $name es indefinida.<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">// Imprime "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">
    Tenga en cuenta que el operador de fusión null permite una imbricación simple:
    <div class="example" id="example-8">
     <p><strong>Ejemplo #8 Imbricación de la operación de fusión null</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">// salida 1<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

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