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になります(前述のように、スイッチは等式演算子を使用します)

これを、トリプルが等しいelseステートメントに変更するとよいでしょう。

"00"==="0"はfalseになります。詳細については、このスレッドを確認してください。PHPの等号(==二重等号)と同一性(===三重等号)の比較演算子はどのように異なりますか?

于 2012-06-09T07:28:30.940 に答える
1

==上で指摘したように、スイッチは同じタイプと値(との違い===)をチェックしません。あなたのケースでスイッチを機能させるには、次のようにします。

$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 に答える