0

とを使用するifelseif、以下の比較を簡単に実行できますが、学習目的で、 を使用して同じ機能を使用できるかどうかを分析していますswitch

$x正または負の値を受け取った場合は正しい出力が得られますが、(ゼロ)$xを受け取った場合は0「Lower」という出力が得られますが、正しい出力は「Equal」である必要があります。

コードは次のとおりです。

$x = 0;

switch($x)
{
    case ($x < 0):
        echo 'Lower';
        break;

    case ($x == 0):
        echo 'Equal';
        break;

    case ($x > 0):
        echo 'Bigger';
        break;
    default:
        echo 'Not found';
}

ケースとして式を含む switch ステートメントを使用することは可能ですか?

4

3 に答える 3

4

switch($x)で置き換えますswitch(true)

于 2012-07-09T00:49:36.227 に答える
1

事実上、数値を一致させるのではなく、ブール値の結果を一致させます。

正または負の数値はブール値にキャストされ、 にtrueのみ0キャストされるfalseため、基本的に正または負の数値をorと比較trueすると、期待する結果が得られます。($x < 0)($x > 0)

ただし、andに0キャストするので、一致することはありません。と同様に、switch の最初のステートメントが一致します。false(0 == 0)true0 < 0false

于 2012-07-09T00:57:41.280 に答える
0

$x がテスト結果と等しいかどうかを比較しています。 $x = 0$x のブール値は ですfalse。0 以外の場合はtrueです。そのため、 を返す最初のテストに常に陥りますfalse

代わりにこれを試してください:

$x = 0;

switch($x)
{

case 0:
    echo 'Equal';
    break;

case ($x < 0):
    echo 'Lower';
    break;

case ($x > 0):
    echo 'Bigger';
    break;

default:
    echo 'Not found';

}

caseまた、各で文を使用できるかどうか知りたいというコメントも読みましたswitch。はい、可能です:

$x = 0;

switch($x)
{

case ($x < 0):
    echo 'Lower';
    break;

case ($x > 0):
    echo 'Bigger';
    break;

case ($x <> 0):
    echo 'Equal';
    break;

default:
    echo 'Not found';

}

($x <> 0)場合はfalseを返し、$x = 0「等しい」とエコーします

于 2012-07-09T01:06:45.117 に答える