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__);
?>