我的代码是这样的:
function someFunction($myKey){
switch($myKey){
case 'equals':
$condition = '=';
break;
case 'notequals':
$condition = '!=';
break;
default:
$condition = 'like';
break;
}
return $condition;
}
echo someFunction(1); // output 'like' good
echo someFunction('equals'); // output '=' also good
echo someFunction(0); // but here output '=' why ?
echo someFunction(true); // and here also '=' why ?
正如我评论的那样,为什么0
和true
会转到第一种情况而不是默认情况?
虽然我修复了在切换条件之前将$myKey
转换为字符串的问题
但我很好奇我在这里做错了什么。
答案 0 :(得分:4)
在PHP switch
页面中,您可以看到它使用了Loose Comparison。
0
的比较将字符串equals
转换为整数0
true
的比较将字符串equals
转换为布尔值true
由于您要比较字符串,请将参数强制转换为包含(string)
或strval()
的字符串:
function someFunction($myKey){
switch((string)$myKey){
case 'equals':
$condition = '=';
break;
case 'notequals':
$condition = '!=';
break;
default:
$condition = 'like';
break;
}
return $condition;
}