PHP返回数据类型与Switch vs If Else

时间:2018-05-01 20:53:45

标签: php if-statement types switch-statement

我正在尝试跟踪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中使用严格的比较。不知道发生了什么事。任何人吗?

3 个答案:

答案 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