This article goes over a gotcha of PHP switch statements.
Quiz
Question 1
What does the following output?
switch (null) {
case '':
var_dump('');
break;
case null:
var_dump(null);
break;
}
The answer is string(0) "".
Question 2
What does the following output?
switch ('') {
case null:
var_dump(null);
break;
case '':
var_dump('');
break;
}
The answer is NULL.
Question 3
What does the following output?
switch ('0') {
case 0:
var_dump(0);
break;
case '0':
var_dump('0');
break;
}
The answer is int(0).
Loose comparison
Because PHP switch/case does loose comparison, it can evaluate incorrectly for the cases:
truefalse10-1'1''0''-1'null[]''
This is due to PHP’s implicit casting or type juggling.
See Repl.it: