切换条件在int 0

时间:2018-05-02 17:07:53

标签: php variables switch-statement conditional-statements

我的代码是这样的:

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 ?

正如我评论的那样,为什么0true会转到第一种情况而不是默认情况?

虽然我修复了在切换条件之前将$myKey转换为字符串的问题 但我很好奇我在这里做错了什么。

1 个答案:

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