php是/ switch语句检查'0'字符串或'00'字符串

时间:2012-06-09 07:14:33

标签: php

我有一个愚蠢的问题,但我被困住了。

这是我的简单代码

$my_string = '00';

switch ((string)$my_string)
{
    case '-1': $return_string = 'bla bla..'; break;
    case '0': $return_string = 'One zero'; break;
    case '00': $return_string = 'Double zero'; break;
    default: $return_string = 'default'; break;
}

echo $return_string;

返回前代码的结果

One Zero

有什么建议吗?

4 个答案:

答案 0 :(得分:4)

switch使用equality,而非身份。由于'0'等于'00'(因为它们都评估为0),结构将无效。

答案 1 :(得分:2)

那么, 这基本上是因为php不是强类型语言。 所以“00”==“0”给出为真(并且当所述开关使用相等运算符时)

您可能会将此更改为if else语句,其中包含三等号并且可以执行此操作。

“00”===“0”给出错误。查看此主题以获取更多详细信息How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

答案 2 :(得分:1)

如上所述:switch不会检查相同的类型和值(=====之间的差异)。要在您的情况下使用开关,您可以这样做:

$my_string = '00';
switch (true)
{
    case ((string) $my_string === '-1'): $return_string = 'bla bla..'; break;
    case ((string) $my_string === '0'): $return_string = 'One zero'; break;
    case ((string) $my_string === '00'): $return_string = 'Double zero'; break;
    default: $return_string = 'default'; break;
}

答案 3 :(得分:0)

另一种解决方案是:

switch ('_'.$my_string)
{
    case '_-1': $return_string = 'bla bla..'  ; break;
    case '_0' : $return_string = 'One zero'   ; break;
    case '_00': $return_string = 'Double zero'; break;
    default   : $return_string = 'default'    ; break;
}