我有一个愚蠢的问题,但我被困住了。
这是我的简单代码
$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
有什么建议吗?
答案 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;
}