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 >'.true.'<<br>';
/* true wird als 1 ausgegeben */
echo 'FALSE        ergibt >'.false.'<<br>';
/* false wird als Leerstring ausgegeben */
echo '($a = 0)     ergibt >'.($a = 0).'<<br>';
/* gibt eine 0 aus, denn eine Zuweisung gibt den zugewiesenen Wert
   zurueck. Eine 0 wird aber als FALSE interpretiert. */
echo '($b = 1)     ergibt >'.($b = 1).'<<br>';
/* gibt eine 1 aus (wie oben). Alles, was keine 0 ist wird
   aber als TRUE interpretiert */
echo '($c = "")    ergibt >'.($c = "").'<<br>';
/* wird nichts ausgeben, denn ein Leerstring wird zugewiesen */
echo '($d = "foo") ergibt >'.($e = "foo").'<<br>';
/* hier wird es noch einmal sehr deutlich: Es wird foo ausgegeben */
echo '("" == 0)    ergibt >'.("" == 0).'<<br>';
/* es wird TRUE (ausgegeben als 1) zurueckgegeben, denn ein Leerstring
   ist in der gleichen "Aequivalenzklasse" wie die 0 */
echo '("0" == 0)   ergibt >'.("0" == 0).'<<br>';
/* ergibt TRUE, denn 0 ist gleich 0; dass String und Zahl verglichen
   werden bleibt hier unberuecksichtigt */
echo '(FALSE == 0) ergibt >'.(FALSE == 0).'<<br>';
/* ergibt TRUE, denn eine Null und FALSE werden gleich interpretiert
   (gleiches gilt fuer TRUE/1 */
echo '("0" === 0)   ergibt >'.("0" === 0).'<<br>';
/* ergibt FALSE, denn String ist nicht Zahl */
echo '(" " == 0)   ergibt >'.(" " == 0).'<<br>';
/* ergibt TRUE denn das Leerzeichen ist in der gleichen "Aequivalenzklasse"
   wie die 0 */
echo '("" === 0)   ergibt >'.("" === 0).'<<br>';
/* ergibt FALSE, denn ein String ist keine Zahl */
echo '(0 === 0.0)  ergibt >'.(0 === 0.0).'<<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 >'.(FALSE === 0).'<<br>';
/* ergibt FALSE. Zwar wird beides in gleiches umgewandelt jedoch
   sind die Typen ungleich (gleiches gilt fuer TRUE/1  */
echo '(" " === 0)  ergibt >'.(" " === 0).'<<br>';
/* ergibt nichts, denn String und Zahl machen es gleich FALSE */
echo '<br>';
$foo = 1; echo '"(1++)" ergibt >'.($foo++).'<<br>';
/* gibt eins aus, denn nach dem Zugriff auf $foo (-> ausgeben)
   wird $foo inkrementiert */
$foo = 1; echo '"(++1)" ergibt >'.(++$foo).'<<br>';
/* gibt zwei aus, denn vor dem Zugriff wird inkrementiert */
echo '<hr>';
highlight_file(__FILE__);
?>