Prüfung auf 0 in switch-anweisung php

Problem:

<?php $i = 0;<br />echo gettype($i) . "
";
switch ($i) {
 case ($i == 0):
 echo "WAHR";
 break;
 case ($i != 0):
 echo "FALSCH";
 echo "
Datentyp: " . gettype($i);
 break;
}
?\>

Frage: Warum ist 0!=0 obwohl beide Nullen den gleichen Datentyp besitzen?
Mit if funktioniert die Prüfung übrigens erwartungsgemäß!

Weil Du mit $i die Variable schon angibst, die überprüft werden soll und im case-Bereich der Wert der Variable angegeben wird:

switch ($i) {
case ‚0‘:
echo „WAHR“;
break;

case ‚irgendwas‘:
echo ‚hier wird was anderes gemacht‘;
break;

default:
echo „FALSCH“;

}

Hallo,

nicht
case ($i == 0):
sondern
case 0:

und nicht
case ($i != 0):
sondern
default:
um alles andere ab zu fangen.

Dann sollte es funktionieren.

Gruß Thomas

Hallo Thorsten,

die Anweistung ist falsch geschrieben:

<?php :blush:i = 0;
echo gettype($i) . " "; switch ($i) { case 0: echo "wahr"; break; case 0: echo "wahr"; break; }

Wo liegt das Problem, ganz einfach, nach der Anweisung case muss ein Wert vorliegen, es kann keine weiter Boolsche Aktion ausgeführt werden.
Mit switch ($i) wird der Wert ausgelesen und mit Case nur der zu vergleichende Wert bestimmt.
Also wäre es sinnvoll vor der Case Anweisung mit If zu prüfen und einen Wert zu bestimmen, dann kann mit Case weiter bestimmt werden.
Wenn ich mehr Hintergrund hätte könnte ich vielleicht eine andere Lösung anbieten.
Gruß Christoph, ich hoffe Du kommst damit weiter

sry, aber ich hab keine ahnung, was du von mir willst.

Hi, warum es mit switch nicht wie erwartet funktioniert weiss ich nicht.

Aber so funktioniert es:

<?php $i = 0;
print "Datentyp: " . gettype($i); if ($i == 0) { print "ist null"; print " Datentyp: " . gettype($i); } else { print "nicht null"; print " Datentyp: " . gettype($i); } ?\>