4

我有一个白痴问题,但我被卡住了。

这是我的简单代码

$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

4 回答 4

4

switch使用相等,而不是身份。由于'0'等于'00'(因为它们都评估为0),因此该结构将不起作用。

于 2012-06-09T07:19:02.887 回答
2

嗯,这基本上是因为 php 不是一种强类型语言。所以 "00" == "0" 给出了 true (正如所说的 switch 使用相等运算符)

您可以将其更改为带有三等号的 if else 语句,这样就可以了。

“00” === “0” 给出错误。检查此线程以获取更多详细信息。PHP 相等(== 双等)和身份(=== 三等)比较运算符有何不同?

于 2012-06-09T07:28:30.940 回答
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;
}
于 2012-06-09T07:46:22.080 回答
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;
}
于 2013-10-25T08:52:10.937 回答