[php] Testcase met switch statement geeft vreemd resultaat?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey,

Ik heb het volgende stukje code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$test = 0;

switch($test)
{
    case 3:
    case 6:
        echo "a";
        break;
    case($test >= 9):
        echo "b";
        break;
    default:
        echo "c";
}

Hetgeen dat het moet doet lijkt me helder. Het vreemde alleen aan deze switch is dat hij bij de waarde 0 van $test het resultaat "b" geeft. Bij alle andere waarden gaat het wel goed.

Ik heb op php.net gekeken maar kon over dit specifieke stukje geen info vinden. Misschien iemand hier die een verklaring heeft?

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Jep.. Het komt door de haken om $test >= 0. Dit resulteert in een false wat oplevert dat (false == 0) wordt geevalueerd door je switch. Dit is du true dus wordt b ge-echoed.

edit..
Iets meer uitleg allicht nodig. Een switch($var) voert voor elke case een vergelijking uit met $var
PHP:
1
2
3
4
5
6
7
8
9
10
switch ($var)
{
 case "a": //do a
  break;
 case "b": //do b
  break;
}
//is exact hetzelfde als:
    if ($var == "a") { //do a }
elseif($var == "b") { //do b }


Als je een condiitie ($var >= 9) opneemt dan wordt dat dus
PHP:
1
2
3
4
5
if ($var == ($var >= 9)) { //do stuff }
//met $var als 0
if (0 == ( 0 >= 9)) { //do stuff }
ofwel:
if (0 == false) { //do stuff }


edit2: what he said vvvv

[ Voor 70% gewijzigd door T-MOB op 19-01-2005 18:20 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Zie het zo:
PHP:
1
if ( $test == ( $test >= 9 ) )

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Een hele nette uitleg! Super! Bedankt!