<?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 => 'fr',
  ),
  'this' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Comparaison',
    2 => 'Op&eacute;rateurs de comparaison',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Les op&eacute;rateurs',
  ),
  'prev' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bitwise',
  ),
  'next' => 
  array (
    0 => 'language.operators.errorcontrol.php',
    1 => 'Contr&ocirc;le d\'erreur',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    '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">Opérateurs de comparaison</h2>
 
 <p class="simpara">
  Les opérateurs de comparaison, comme leur nom l&#039;indique,
  permettent de comparer deux valeurs. Il est également recommandé de consulter les
  <a href="types.comparisons.php" class="link">tables de comparaisons de types</a>,
  car elles montrent des exemples de beaucoup de types de comparaisons.
 </p>
 <table class="doctable table">
  <caption><strong>Opérateurs de comparaison</strong></caption>
  
   <thead>
    <tr>
     <th>Exemple</th>
     <th>Nom</th>
     <th>Résultat</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td>$a == $b</td>
     <td>Égal</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est égal à
      <var class="varname">$b</var> après le transtypage.</td>
    </tr>

    <tr>
     <td>$a === $b</td>
     <td>Identique</td>
     <td>
      <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est égal à <var class="varname">$b</var> et
      qu&#039;ils sont de même type.
     </td>
    </tr>

    <tr>
     <td>$a != $b</td>
     <td>Différent</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est différent de
      <var class="varname">$b</var> après le transtypage.</td>
    </tr>

    <tr>
     <td>$a &lt;&gt; $b</td>
     <td>Différent</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est différent de
      <var class="varname">$b</var> après le transtypage.</td>
    </tr>

    <tr>
     <td>$a !== $b</td>
     <td>Différent</td>
     <td>
      <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est différent de <var class="varname">$b</var>
      ou bien s&#039;ils ne sont pas du même type.
     </td>
    </tr>

    <tr>
     <td>$a &lt; $b</td>
     <td>Plus petit que</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est strictement plus petit que
      <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &gt; $b</td>
     <td>Plus grand</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est strictement plus grand que
      <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &lt;= $b</td>
     <td>Inférieur ou égal</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est plus petit ou égal à
      <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &gt;= $b</td>
     <td>Supérieur ou égal</td>
     <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> si <var class="varname">$a</var> est plus grand ou égal à
      <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td>$a &lt;=&gt; $b</td>
     <td>Combiné</td>
     <td>
      Un <a href="language.types.integer.php" class="link">entier</a> inférieur, égal ou supérieur à zéro lorsque
      <var class="varname">$a</var> est inférieur, égal, ou supérieur à
      <var class="varname">$b</var> respectivement.
     </td>
    </tr>


   </tbody>
  
 </table>

 <p class="para">
  Si les deux opérandes sont des
  <a href="language.types.numeric-strings.php" class="link">chaînes numériques</a>,
  ou si un opérande est un nombre et l&#039;autre est une
  <a href="language.types.numeric-strings.php" class="link">chaîne numérique</a>,
  alors la comparaison sera effectuée numériquement.
  Ces règles s&#039;appliquent également à l&#039;instruction
  <a href="control-structures.switch.php" class="link">switch</a>.
  La conversion de type n&#039;intervient pas lorsque la comparaison est
  <code class="literal">===</code> ou <code class="literal">!==</code>
  vu que ceci engendre aussi bien une comparaison de type que de valeur.
 </p>

 <div class="warning"><strong class="warning">Avertissement</strong>
  <p class="para">
   Avant PHP 8.0.0, si une <span class="type"><a href="language.types.string.php" class="type string">string</a></span> est comparée à un nombre
   ou à une chaîne numérique alors la <span class="type"><a href="language.types.string.php" class="type string">string</a></span> sera convertie en un
   nombre avant d&#039;effectuer la comparaison. Ceci peut mener à des résultats
   surprenants comme le montre l&#039;exemple suivant :
   <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">Résultat de l&#039;exemple ci-dessus 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">Résultat de l&#039;exemple ci-dessus 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>Exemple #1 Opérateurs de comparaison</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">// Entiers<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">1 </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #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 />// Nombres flottants<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 />// Chaînes de caractères<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"a" </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #DD0000">"a"</span><span style="color: #007700">, </span><span style="color: #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 />// Tableaux<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 />// Objets<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 />// non seulement les valeurs sont comparées; les clés doivent correspondre<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">
  Pour les différents types, la comparaison est faite en suivant
  la table suivante (dans l&#039;ordre).
 </p>
 <table id="language.operators.comparison.types" class="doctable table">
  <caption><strong>Comparaison avec plusieurs types</strong></caption>
  
   <thead>
    <tr>
     <th>Type de l&#039;opérande 1</th>
     <th>Type de l&#039;opérande 2</th>
     <th>Résultat</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>Convertit <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> en &quot;&quot;, comparaison numérique ou lexicale</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>N&#039;importe quoi</td>
     <td>Convertit les deux côtés 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>Les classes internes peuvent définir leur propre méthode de
      comparaison ; différentes classes sont incomparables ; entre objets
      de même classe voir <a href="language.oop5.object-comparison.php" class="link">Comparaison d&#039;objet</a></td>
    </tr>

    <tr>
     <td>
      <a href="language.types.string.php" class="link">chaîne de caractères</a>, <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>, <a href="language.types.integer.php" class="link">entier</a> ou <a href="language.types.float.php" class="link">nombre décimal</a>
     </td>
     <td>
      <a href="language.types.string.php" class="link">chaîne de caractères</a>, <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>, <a href="language.types.integer.php" class="link">entier</a> ou <a href="language.types.float.php" class="link">nombre décimal</a>
     </td>
     <td>
      Transforme les chaînes de caractères et les ressources en nombres
     </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>Le tableau avec le moins de membres est plus petit, si la clé de
      l&#039;opérande 1 n&#039;est pas trouvée dans l&#039;opérande 2, alors les tableaux
      sont incomparables, sinon la comparaison se fait valeur par valeur
      (voir l&#039;exemple suivant)
     </td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span></td>
     <td>N&#039;importe quoi</td>
     <td>L&#039;<span class="type">objet</span> est toujours plus grand</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span></td>
     <td>N&#039;importe quoi</td>
     <td>Le <span class="type">tableau</span> est toujours plus grand</td>
    </tr>

   </tbody>
  
 </table>


 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Exemple #2 Comparaison 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 et null sont toujours comparés comme des booléens<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 - identique à (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 - identique à (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 - identique à (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 - identique à (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 est identique à 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>Exemple #3 Transcription des comparaisons standards des tableaux</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">// Les tableaux sont comparés comme ceci avec les opérateurs standards de comparaison et l'opérateur combiné<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">Avertissement</strong>
  <h1 class="title">Comparaison de nombre à virgule flottante</h1>

  <p class="para">
   À cause de la façon dont les nombres à virgule flottante sont représentés
   en interne, il est déconseillé de tester l&#039;égalité entre deux nombres
   de type <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
  </p>

  <p class="para">
   Voir la documentation de <span class="type"><a href="language.types.float.php" class="type float">float</a></span> pour plus d&#039;informations.
  </p>
 </div>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <span class="simpara">
   Il est important d&#039;être conscient que la manipulation des types n&#039;est pas toujours évidente lors de la comparaison
   de valeurs de différents types, en particulier comparant des <a href="language.types.integer.php" class="link">entier</a>s à des <a href="language.types.boolean.php" class="link">booléen</a>s ou des
   <a href="language.types.integer.php" class="link">entier</a>s à des <a href="language.types.string.php" class="link">chaîne de caractères</a>s. Il est par conséquent généralement recommandé d&#039;utiliser les
   opérateurs de comparaison <code class="literal">===</code> et <code class="literal">!==</code> au lieu de
   <code class="literal">==</code> et <code class="literal">!=</code> dans la plupart des cas.
  </span>
 </p></blockquote>

 <div class="sect2" id="language.operators.comparison.incomparable">
  <h3 class="title">Valeurs incomparables</h3>
  <p class="simpara">
   Tandis que les comparaisons d&#039;identité (<code class="literal">===</code> et <code class="literal">!==</code>)
   peuvent être appliquées à des valeurs arbitraires, les autres opérateurs de
   comparaisons devraient seulement être appliqués à des valeurs comparables.
   Le résultat de la comparaison des valeurs incomparables est indéfini,
   et ne devrait pas être utilisé.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Voir aussi</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">opérateur de tableaux</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">L&#039;opérateur ternaire</h3>
  <p class="para">
   Un autre opérateur conditionnel est l&#039;opérateur
   ternaire (&quot;?:&quot;).
   <div class="example" id="example-4">
    <p><strong>Exemple #4 Affectation d&#039;une valeur par défaut</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">// Exemple d'utilisation pour l'opérateur ternaire<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 ligne ci-dessus est identique à la condition suivante :<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;expression <code class="literal">(expr1) ? (expr2) : (expr3)</code>
   est évaluée à <span class="replaceable">expr2</span> si
   <span class="replaceable">expr1</span> est évaluée à <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, et
   <span class="replaceable">expr3</span> si
   <span class="replaceable">expr1</span> est évaluée à <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <p class="para">
   Il est possible d&#039;omettre la partie centrale de l&#039;opérateur ternaire.
   L&#039;expression <code class="literal">expr1 ?: expr3</code> évalue le résultat de
   <span class="replaceable">expr1</span> si <span class="replaceable">expr1</span>
   vaut <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, et <span class="replaceable">expr3</span> sinon.
   <span class="replaceable">expr1</span> n&#039;est évalué qu&#039;une seule fois dans ce cas.
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Il est à noter que l&#039;opérateur ternaire est une expression, et il n&#039;est pas
    évalué en tant que variable, mais en tant que résultat de l&#039;expression.
    Il est important de le savoir pour retourner une variable
    par référence. L&#039;instruction
    <code class="literal">return $var == 42 ? $a : $b;</code>
    dans une fonction retournée par référence ne fonctionnera donc pas et une
    alerte est émise.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Il est recommandé de ne pas &quot;empiler&quot; les expressions ternaires.
    Le comportement de PHP lors de l&#039;utilisation de plusieurs opérateurs
    ternaires qui ne sont pas entre parenthèses en une unique expression est
    non évident comparé à d&#039;autres langages.
    En effet, antérieur à PHP 8.0.0, l&#039;expression ternaire était évaluée
    gauche-associatif, au lieu de droite-associatif comme la plupart des
    autres langages de programmations.
    Dépendre de la gauche associativité est obsolète à partir de PHP 7.4.0.
    À partir de PHP 8.0.0, l&#039;opérateur ternaire est non associatif.
    <div class="example" id="example-5">
     <p><strong>Exemple #5 Comportement 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 première vue, ce qui suit devrait retourner '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">// cependant, l'expression ci-dessus retournera 't' antérieur à PHP 8.0.0<br />// car l'expression ternaire est gauche-associatif<br /><br />// l'expression suivante est une version plus évidente du même code<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">// ici, on peut constater que la première expression est évaluée à 'true',<br />// ce qui fait qu'elle est évaluée à (bool)true, ce qui retourne la branche<br />// 'vraie' de la seconde expression ternaire.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    La combinaison de ternaire court (<code class="literal">?:</code>), cependant, est stable et se comporte de manière raisonnable.
    Ceci évaluera au premier argument qui évalue à une valeur non-falsy.
    À noter que des valeurs indéfinies émettront toujours un avertissement.
    <div class="example" id="example-6">
     <p><strong>Exemple #6 Combinaison de ternaire court</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">Opérateur de fusion Null</h3>
  <p class="para">
   Un autre opérateur court utile est l&#039;opérateur &quot;??&quot; (ou fusion null).
   <div class="example" id="example-7">
    <p><strong>Exemple #7 Assigner une valeur par défaut</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">// Exemple d'utilisation pour : Opérateur de fusion 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">// le code ci-dessus est équivalent à cette structure 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;expression <code class="literal">(expr1) ?? (expr2)</code> retourne
   <span class="replaceable">expr2</span> si <span class="replaceable">expr1</span> est
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, et <span class="replaceable">expr1</span> dans les autres cas.
  </p>
  <p class="para">
   En particulier, cet opérateur n&#039;émet pas de notice ou avertissement si
   la partie gauche n&#039;existe pas, exactement comme <span class="function"><a href="function.isset.php" class="function">isset()</a></span>.
   Ceci est particulièrement utile pour les clés des tableaux.
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Il est à noter que l&#039;opérateur null de fusion est une expression, et qu&#039;il
    ne s&#039;évalue pas comme une variable, mais comme le résultat d&#039;une expression.
    Il est important de le savoir pour renvoyer une variable
    par référence.
    L&#039;expression <code class="literal">return $foo ?? $bar;</code> est un retour par
    référence qui ne fonctionne donc pas et émet un avertissement.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    L&#039;opérateur de fusion null a une précédence faible. Ceci signifie qu&#039;en le mélangeant
    avec d&#039;autres opérateurs (tels que la concaténation de chaînes ou les opérateurs
    arithmétiques), des parenthèses seront probablement requises.
   </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">// Émet un avertissement que $name est indéfinie.<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">// Affiche "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">Note</strong>: 
   <p class="para">
    Il est à noter que l&#039;opérateur de fusion null permet une imbrication simple :
    <div class="example" id="example-8">
     <p><strong>Exemple #8 Imbrication de l&#039;opération de fusion 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">// affiche 1<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

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