<?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 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Vergleich',
    2 => 'Vergleichs-Operatoren',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operatoren',
  ),
  'prev' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bit',
  ),
  'next' => 
  array (
    0 => 'language.operators.errorcontrol.php',
    1 => 'Fehlerkontrolle',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    '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">Vergleichs-Operatoren</h2>
 
 <p class="simpara">
  Vergleichs-Operatoren erlauben es – wie der Name schon sagt – zwei Werte zu
  vergleichen. Wenn Sie an Beispielen verschiedener auf Typen bezogener
  Vergleiche interessiert sind, können Sie sich die
  <a href="types.comparisons.php" class="link">PHP Typvergleich-Tabellen</a>
  anschauen.
 </p>
 <table class="doctable table">
  <caption><strong>Vergleichsoperatoren</strong></caption>
  
   <thead>
    <tr>
     <th>Beispiel</th>
     <th>Name</th>
     <th>Ergebnis</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td>$a == $b</td>
     <td>Gleich</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn nach der Typumwandlung <var class="varname">$a</var>
      gleich <var class="varname">$b</var> ist.
     </td>
    </tr>

    <tr>
     <td>$a === $b</td>
     <td>Identisch</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn <var class="varname">$a</var> gleich
      <var class="varname">$b</var> ist und beide denselben Typ haben.
     </td>
    </tr>

    <tr>
     <td>$a != $b</td>
     <td>Ungleich</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn nach der Typumwandlung <var class="varname">$a</var>
      nicht gleich <var class="varname">$b</var> ist.
     </td>
    </tr>

    <tr>
     <td>$a &lt;&gt; $b</td>
     <td>Ungleich</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn nach der Typumwandlung <var class="varname">$a</var>
      nicht gleich <var class="varname">$b</var> ist.
     </td>
    </tr>

    <tr>
     <td>$a !== $b</td>
     <td>Nicht identisch</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn <var class="varname">$a</var> nicht gleich
      <var class="varname">$b</var> ist, oder wenn beide nicht denselben Typ haben.
     </td>
    </tr>

    <tr>
     <td>$a &lt; $b</td>
     <td>Kleiner als</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn <var class="varname">$a</var> kleiner als
      <var class="varname">$b</var> ist.
     </td>
    </tr>

    <tr>
     <td>$a &gt; $b</td>
     <td>Größer als</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn <var class="varname">$a</var> größer als
      <var class="varname">$b</var> ist.
     </td>
    </tr>

    <tr>
     <td>$a &lt;= $b</td>
     <td>Kleiner oder gleich</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn <var class="varname">$a</var> kleiner oder gleich
      <var class="varname">$b</var> ist.
     </td>
    </tr>

    <tr>
     <td>$a &gt;= $b</td>
     <td>Größer oder gleich</td>
     <td>
      Gibt <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück, wenn <var class="varname">$a</var> größer oder gleich
      <var class="varname">$b</var> ist.
     </td>
    </tr>

    <tr>
     <td>$a &lt;=&gt; $b</td>
     <td>Raumschiff</td>
     <td>
      Eine Ganzzahl (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>), die kleiner als, gleich oder größer
      als 0 ist, wenn <var class="varname">$a</var> kleiner als, gleich oder größer
      als <var class="varname">$b</var> ist.
     </td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  Falls beide Operanden
  <a href="language.types.numeric-strings.php" class="link">numerische Zeichenketten</a>
  sind oder ein Operand eine Zahl ist und der andere eine
  <a href="language.types.numeric-strings.php" class="link">numerische Zeichenkette</a>,
  dann wird der Vergleich numerisch durchgeführt. Diese Regel gilt ebenfalls
  für die <a href="control-structures.switch.php" class="link">switch</a>-Anweisung.
  Die Typumwandlung wird nicht durchgeführt, wenn der Vergleichsoperator
  <code class="literal">===</code> oder <code class="literal">!==</code> ist, da hier sowohl der
  Typ als auch der Wert verglichen werden.
 </p>
 <div class="warning"><strong class="warning">Warnung</strong>
  <p class="para">
   Vor PHP 8.0.0 wurde bei einem Vergleich einer Zeichenkette mit einer Zahl
   oder einer numerischen Zeichenkette die Zeichenkette vor dem Vergleich in
   eine Zahl umgewandelt und der Vergleich numerisch durchgeführt.
   <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">Das oben gezeigte Beispiel erzeugt mit PHP 7 folgende Ausgabe:</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">Das oben gezeigte Beispiel erzeugt mit PHP 8 folgende Ausgabe:</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>Beispiel #1 Vergleichsoperatoren</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">// Ganzzahlen<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 />// Gleitkommazahlen<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 />// Zeichenketten<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 />// Objekte<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 />// nicht nur die Werte werden verglichen; die Schlüssel müssen übereinstimmen<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">
  Für die verschiedenen Typen wird der Vergleich gemäß der folgenden Tabelle
  durchgeführt (in der angegebenen Reihenfolge).
 </p>
 <table id="language.operators.comparison.types" class="doctable table">
  <caption><strong>Vergleich mit verschiedenen Typen</strong></caption>
  
   <thead>
    <tr>
     <th>Typ des 1. Operanden</th>
     <th>Typ des 2. Operanden</th>
     <th>Ergebnis</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td><span class="type"><a href="language.types.null.php" class="type null">null</a></span> oder <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>
      Umwandlung von <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> nach &quot;&quot;, dann numerischer oder lexikalischer
      Vergleich
     </td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> oder <span class="type"><a href="language.types.null.php" class="type null">null</a></span></td>
     <td>anything</td>
     <td>
      Umwandlung beider Werte nach <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>, dann <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>
      Eingebaute Klassen können eigene Vergleichsregeln definieren;
      verschiedene Klassen können nicht verglichen werden; für den Vergleich
      von Objekten derselben Klasse siehe
      <a href="language.oop5.object-comparison.php" class="link">Objektvergleiche</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> oder <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> oder <span class="type"><a href="language.types.float.php" class="type float">float</a></span></td>
     <td>
      Umwandlung von Zeichenketten und Ressourcen in Zahlen, dann numerischer
      Vergleich
     </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>
      Das Array mit weniger Elementen ist kleiner; wird ein Schlüssel vom
      ersten Operanden nicht im zweiten gefunden, dann sind die Arrays nicht
      vergleichbar, andernfalls wird Element für Element verglichen (siehe
      folgendes Beispiel)
     </td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span></td>
     <td>anything</td>
     <td><span class="type"><a href="language.types.object.php" class="type object">object</a></span> ist immer größer</td>
    </tr>

    <tr>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span></td>
     <td>anything</td>
     <td><span class="type"><a href="language.types.array.php" class="type array">array</a></span> ist immer größer</td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Beispiel #2 Boolesche und null-Vergleiche</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">// Boolesche Werte und null werden immer als Boolesche Werte verglichen<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 - dasselbe wie (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 - dasselbe wie (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 - dasselbe wie (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 - dasselbe wie (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 ist 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>Beispiel #3 Umschreibung von Standard-Array-Vergleichen</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 werden mit den normalen Vergleichsoperatoren sowie dem Raumschiff-Operator wie folgt verglichen<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">Warnung</strong>
  <h1 class="title">Vergleich von Gleitkommazahlen</h1>

  <p class="para">
   Aufgrund der Art wie Gleitkommazahlen (<span class="type"><a href="language.types.float.php" class="type float">float</a></span>) intern
   dargestellt werden, sollten zwei Gleitkommazahlen nicht auf Gleichheit
   getestet werden.
  </p>

  <p class="para">
   Weitere Informationen sind der Dokumantation von <span class="type"><a href="language.types.float.php" class="type float">float</a></span> zu
   entnehmen.
  </p>
 </div>

 <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
  <span class="simpara">
   Es ist wichtig zu beachten, dass die Typumwandlung von PHP nicht immer
   offensichtlich ist, wenn Werte unterschiedlichen Typs verglichen werden,
   insbesondere beim Vergleich von <a href="language.types.integer.php" class="link">Integer</a>n mit <a href="language.types.boolean.php" class="link">Boolean</a>s oder <a href="language.types.integer.php" class="link">Integer</a>n
   mit <a href="language.types.string.php" class="link">String</a>s. Daher ist es im Allgemeinen in den meisten Fällen ratsam,
   <code class="literal">===</code> und <code class="literal">!==</code> für Vergleiche zu
   verwenden, anstatt <code class="literal">==</code> und <code class="literal">!=</code>.
  </span>
 </p></blockquote>

 <div class="sect2" id="language.operators.comparison.incomparable">
  <h3 class="title">Nicht vergleichbare Werte</h3>
  <p class="simpara">
   Während der Identitätsvergleich (<code class="literal">===</code> und
   <code class="literal">!==</code>) auf beliebige Werte angewendet werden kann, sollten
   die anderen Vergleichsoperatoren nur auf vergleichbare Werte angewandt
   werden. Wenn nicht vergleichbare Werte verglichen werden, ist das Ergebnis
   undefiniert und sollte nicht als verlässlich eingestuft werden.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Siehe auch</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-Operatoren</a></li>
    <li><a href="language.types.php" class="link">Typen</a></li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="language.operators.comparison.ternary">
  <h3 class="title">Ternärer Operator</h3>
  <p class="para">
   Ein weiterer Vergleichs-Operator ist der &quot;?:&quot; (oder ternäre) Operator.
   <div class="example" id="example-4">
    <p><strong>Beispiel #4 Zuweisen eines Standardwerts</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">// Beispielanwendung für den ternären 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">'standard' </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">// Obiges ist mit dieser if/else-Anweisung identisch<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">'standard'</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 /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   Der Ausdruck <code class="literal">(ausdr1) ? (ausdr2) : (ausdr3)</code> wird zu
   <span class="replaceable">ausdr2</span> ausgewertet, wenn
   <span class="replaceable">ausdr1</span> als <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ausgewertet wird, und zu
   <span class="replaceable">ausdr3</span>, wenn <span class="replaceable">ausdr1</span>
   zu <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ausgewertet wird.
  </p>
  <p class="para">
   Beim ternären Operator kann der mittlere Teil weggelassen werden. Der
   Ausdruck <code class="literal">(ausdr1) ?: (ausdr3)</code> wird zum Ergebnis von
   <span class="replaceable">ausdr1</span> zurück, wenn
   <span class="replaceable">ausdr1</span> zu <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ausgewertet wird, und zu
   <span class="replaceable">ausdr3</span> andernfalls.
   <span class="replaceable">ausdr1</span> wird in diesem Fall nur einmal
   ausgewertet.
  </p>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <span class="simpara">
    Es ist zu beachten, dass der ternäre Operator ein Ausdruck ist und nicht
    als Variable, sondern als Wert eines Ausdrucks ausgewertet wird. Dies ist
    unbedingt zu berücksichtigen, wenn eine Variable per Referenz
    zurückgegeben werden soll. Die Anweisung <code class="literal">return $var == 42 ? $a :
    $b;</code> in einer Funktion, die per Referenz zurückgibt, wird daher
    nicht funktionieren und eine Warnung erzeugen.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Es wird empfohlen, die &quot;Verschachtelung&quot; von ternären Ausdrücken zu
    vermeiden. Das Verhalten von PHP bei der Verwendung von mehr als einem
    nicht einkgeklammerten ternären Operator innerhalb eines einzigen
    Ausdrucks ist im Vergleich zu anderen Sprachen nicht eindeutig. In der Tat
    wurden ternäre Ausdrücke vor PHP 8.0.0 links-assoziativ (von links nach
    rechts) ausgewertet, und nicht rechts-assoziativ wie in den meisten
    anderen Programmiersprachen. Die Links-Assoziativität ist seit PHP 7.4.0
    veraltet. Seit PHP 8.0.0 ist der ternäre Operator nicht-assoziativ.
    <div class="example" id="example-5">
     <p><strong>Beispiel #5 Ungewöhnliches Verhalten des ternären Operators</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">// auf den ersten Blick scheint das folgende 'true' auszugeben<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">// allerdings wird vor PHP 8.0.0 tatsächlich 't' ausgegeben<br />// das kommt daher, dass ternäre Ausdrücke links-assoziativ ausgewertet werden<br /><br />// das Folgende ist eine augenfälligere Variante desselben Codes wie oben<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">// hier kann man sehen, dass der erste Ausdruck zu 'true' ausgewertet wird,<br />// was wiederum zu (bool) true ausgewertet wird, und daher wird der Wahr-Zweig<br />// des zweiten ternären Ausdrucks zurückgegeben.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Die Verkettung von kurzen ternären Operatoren (<code class="literal">?:</code>) ist
    jedoch stabil und verhält sich plausibel. Sie wird zum ersten Argument
    ausgewertet, das einen nicht-falschen Wert ergibt. Es ist zu beachten,
    dass undefinierte Werte immer noch eine Warnung auslösen.
    <div class="example" id="example-6">
     <p><strong>Beispiel #6 Verkettung kurzer ternärer Operatoren</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">Null-Koaleszens-Operator</h3>
  <p class="para">
   Eine weitere nützliche Kurzform eines Operators ist der Operator &quot;??&quot;
   (null-Koaleszenz-Operator, etwa: Zuweisungsoperator für die Kombination mit
   null).
   <div class="example" id="example-7">
    <p><strong>Beispiel #7 Zuweisung eines Standardwerts</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">// Beispiel für die Verwendung des null-Koaleszenz-Operators<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">'standard'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Obiges ist mit dieser if/else-Anweisung identisch<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">'standard'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   Der Ausdruck <code class="literal">(ausdr1) ?? (ausdr2)</code> wird zu
   <span class="replaceable">ausdr2</span> ausgewertet, wenn
   <span class="replaceable">ausdr1</span> <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> ist, und zu
   <span class="replaceable">ausdr1</span> andernfalls.
  </p>
  <p class="para">
   Insbesondere gibt dieser Operator keinen Hinweis und keine Warnung aus,
   wenn der Wert auf der linken Seite nicht existiert, genau wie
   <span class="function"><a href="function.isset.php" class="function">isset()</a></span>. Dies ist besonders für Array-Schlüssel
   nützlich.
  </p>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <span class="simpara">
    Es ist zu beachten, dass der null-Koaleszenz-Operator ein Ausdruck ist und
    nicht als Variable, sondern als Wert eines Ausdrucks ausgewertet wird.
    Dies ist unbedingt zu berücksichtigen, wenn eine Variable per Referenz
    zurückgegeben werden soll. Die Anweisung <code class="literal">return $foo ??
    $bar;</code> in einer Funktion, die per Referenz zurückgibt, wird daher
    nicht funktionieren, und eine Warnung erzeugen.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Der null-Koaleszenz-Operator hat eine niedrige Priorität. Das heißt, wenn
    er mit anderen Operatoren (z. B. Verkettung von Zeichenketten oder
    arithmetische Operatoren) kombiniert wird, sind wahrscheinlich Klammern
    erforderlich.
   </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">// Löst die Warnung aus, dass $name undefiniert ist.<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">// Gibt "Mr. Anonymous" aus<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">Hinweis</strong>: 
   <p class="para">
    Es ist zu beachten, dass der null-Koaleszenz-Operator einfach
    verschachtelt werden kann:
    <div class="example" id="example-8">
     <p><strong>Beispiel #8 Verschachtelung des null-Koaleszenz-Operators</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">// gibt 1 aus<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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