我正在尝试跟踪if / else逻辑返回正确数据类型的原因而不是没有返回正确数据类型的开关。
如果/ ELSE:
val tree : Decision = Query {Title = "A";
Positive = aleft;
Negative = aright;}
val aleft : Decision = Query {Title = "B";
Positive = bleft;
Negative = Result "Yes";}
...
SWITCH:
$value = false;
var_dump($value);
if(is_int($value)) {
echo "INT";
} elseif (is_bool($value)) {
echo "BOOL";
} elseif (is_null($value)) {
echo "NULL";
} else {
echo "DEFAULT";
}
我没有在if / else中使用严格的比较。不知道发生了什么事。任何人吗?
答案 0 :(得分:2)
写作时
switch ($variable) {
case <expression>:
...
break;
}
它相当于写作:
if ($variable == <expression>) {
...
}
所以你的案子类似于写作
if ($value == is_int($value)) {
与
不一样if (is_int($value)) {
虽然我个人认为形式不好,但有些人喜欢写作:
switch (true) {
case is_int($value):
...
break;
case is_bool($value):
...
break;
...
}
答案 1 :(得分:2)
如果你想让你的switch语句工作..你需要switch (gettype($value))
- 它会检查你对整个语句的变量类型......然后{{1}例如,会检查case 'boolean':
在您的案例中看起来的字面翻译是:
boolean
您可以检查以下$value = false;
var_dump($value);
switch (gettype($value)) {
case 'integer':
echo "INT";
break;
case 'boolean':
echo "BOOL";
break;
case 'NULL':
echo "NULL";
break;
default:
echo "DEFAULT";
}
:
types
答案 2 :(得分:0)
switch
将值与案例进行比较,这就是代码的执行方式
$value = FALSE;
var_dump(is_int($value)); // Gives FALSE
switch ($value) {
// PHP runs is_int first and it returns FALSE
// It becomes "case FALSE:" (Which is correct, $value is FALSE)
// So INT is printed
case is_int($value):
....
使用switch
检查类型的正确方法是@zak's answer。