TRUE ergibt >1<
FALSE ergibt ><
($a = 0) ergibt >0<
($b = 1) ergibt >1<
($c = "") ergibt ><
($d = "foo") ergibt >foo<
("" == 0) ergibt >1<
("0" == 0) ergibt >1<
(FALSE == 0) ergibt >1<
("0" === 0) ergibt ><
(" " == 0) ergibt >1<
("" === 0) ergibt ><
(0 === 0.0) ergibt ><
(FALSE === 0) ergibt ><
(" " === 0) ergibt ><

"(1++)" ergibt >1<
"(++1)" ergibt >2<

<?php

/**
  Dieses Script soll den Unterschied zwischen = (Zuweisung),
  == (Vergleich ohne Typenüberprüfung) und === (Vgl m. Typengleichheit)
  zeigen. Bekanntlich ist haeufig das = eine Fehlerquelle bei
  if-Statements.
  Erwaehnt sei hier auch http://php.net//types.comparisons; dort
  gibt es ausfuehrliche Tabellen die verschiedene Vergleiche und
  Funtkionsergebnise veranschaulichen.

  by David Tibbe, 2004/09/06

**/

echo 'TRUE         ergibt &gt;'.true.'&lt;<br>';
/* true wird als 1 ausgegeben */

echo 'FALSE        ergibt &gt;'.false.'&lt;<br>';
/* false wird als Leerstring ausgegeben */

echo '($a = 0)     ergibt &gt;'.($a 0).'&lt;<br>';
/* gibt eine 0 aus, denn eine Zuweisung gibt den zugewiesenen Wert
   zurueck. Eine 0 wird aber als FALSE interpretiert. */

echo '($b = 1)     ergibt &gt;'.($b 1).'&lt;<br>';
/* gibt eine 1 aus (wie oben). Alles, was keine 0 ist wird
   aber als TRUE interpretiert */

echo '($c = "")    ergibt &gt;'.($c "").'&lt;<br>';
/* wird nichts ausgeben, denn ein Leerstring wird zugewiesen */

echo '($d = "foo") ergibt &gt;'.($e "foo").'&lt;<br>';
/* hier wird es noch einmal sehr deutlich: Es wird foo ausgegeben */

echo '("" == 0)    ergibt &gt;'.("" == 0).'&lt;<br>';
/* es wird TRUE (ausgegeben als 1) zurueckgegeben, denn ein Leerstring
   ist in der gleichen "Aequivalenzklasse" wie die 0 */

echo '("0" == 0)   ergibt &gt;'.("0" == 0).'&lt;<br>';
/* ergibt TRUE, denn 0 ist gleich 0; dass String und Zahl verglichen
   werden bleibt hier unberuecksichtigt */

echo '(FALSE == 0) ergibt &gt;'.(FALSE == 0).'&lt;<br>';
/* ergibt TRUE, denn eine Null und FALSE werden gleich interpretiert
   (gleiches gilt fuer TRUE/1 */

echo '("0" === 0)   ergibt &gt;'.("0" === 0).'&lt;<br>';
/* ergibt FALSE, denn String ist nicht Zahl */


echo '(" " == 0)   ergibt &gt;'.(" " == 0).'&lt;<br>';
/* ergibt TRUE denn das Leerzeichen ist in der gleichen "Aequivalenzklasse"
   wie die 0 */

echo '("" === 0)   ergibt &gt;'.("" === 0).'&lt;<br>';
/* ergibt FALSE, denn ein String ist keine Zahl */

echo '(0 === 0.0)  ergibt &gt;'.(=== 0.0).'&lt;<br>';
/* ergibt FALSE. Zwar sind beides Zahlen, beim ersten jedoch ein
   Integer und beim Zweiten ein Float; die Typen sind also nicht gleih */

echo '(FALSE === 0) ergibt &gt;'.(FALSE === 0).'&lt;<br>';
/* ergibt FALSE. Zwar wird beides in gleiches umgewandelt jedoch
   sind die Typen ungleich (gleiches gilt fuer TRUE/1  */

echo '(" " === 0)  ergibt &gt;'.(" " === 0).'&lt;<br>';
/* ergibt nichts, denn String und Zahl machen es gleich FALSE */

echo '<br>';

$foo 1; echo '"(1++)" ergibt &gt;'.($foo++).'&lt;<br>';
/* gibt eins aus, denn nach dem Zugriff auf $foo (-> ausgeben)
   wird $foo inkrementiert */

$foo 1; echo '"(++1)" ergibt &gt;'.(++$foo).'&lt;<br>';
/* gibt zwei aus, denn vor dem Zugriff wird inkrementiert */

echo '<hr>';

highlight_file(__FILE__);


?>