1

次の switch case ステートメントは、case "january": の値を実行するはずでしたが、代わりに case 0: の値を実行しています。コード:

<?php
$a = "january";
switch ($a)
{
    case 0:
    case 3:
        echo "The value is either 0 or 3";
        break;
        echo "0/2";
        break;
    case "january":
        echo "january";
        break;
    case "march":
        echo "The value is ";
        break;
    case 2:
        echo "The value is 2";
        break;
    default:
        echo "Here is ur default message";
        break;
}
?>

ちなみに「マーチ」の場合も同じで……?

4

3 に答える 3

8
$a = 'january';

var_dump($a == 0);
var_dump($a === 0);
var_dump($a == '0');
var_dump($a === '0');

出力:

bool(true)
bool(false)
bool(false)
bool(false)

Type Jugglingを読んでください。どうやら 緩やかな比較switchを使用しています:

注:
switch/case は緩やかな比較を行うことに注意してください。

于 2013-03-26T12:11:56.697 に答える
1

PHP には、この種の動作を引き起こす可能性のある問題がいくつかあります。この場合、問題は、Switch で異なる型を使用しているという事実に起因しています。

このコードを試してください:

echo (0 == "january") ? "true\n" : "false\n"; // Echoes true

これを回避する 1 つの方法は、次のように、スイッチで文字列のみを使用することです。

switch ($a)
{
    case "0":
    case "3":
        echo "The value is either 0 or 3";
        break;
        echo "0/2";
        break;
    case "january":
        echo "january";
        break;
    case "march":
        echo "The value is ";
        break;
    case "2":
        echo "The value is 2";
        break;
    default:
        echo "Here is ur default message";
        break;
}

0 == "0" but "january" != "0" であるため、これは正常に機能します。

Switch は単純な == を使用して、変数の値を各ケースの値と比較します。

于 2013-03-26T12:14:35.997 に答える
0

数字を引用符で囲む必要があります。switch ステートメントを使用する場合、数値と文字列を混在させることはできません。

于 2013-03-26T12:15:14.123 に答える