3
$bytes = 0;
switch($bytes){
    case $bytes == 0:
        echo 'Equal to 0.';
    break;
    case $bytes < 0:
        echo 'Less than 0.';
    break;
}

これは「0未満」を出力します。

なんで?

4

3 に答える 3

8

switchステートメントはそのようには機能しません。各 をチェックするcaseと、値が値と比較されcaseます ( を使用==)。

したがって、PHPは次のことを行っています。

  • $bytes == ($bytes == 0)ですか?それは次のとおり$bytes == (true)です。ですfalseので飛ばします。
  • $bytes == ($bytes < 0)ですか?それは次のとおり$bytes == (false)です。これはtrueであるため、そのブロックを実行します。

ここを使用する必要がありif/elseます。

$bytes = 0;
if($bytes == 0){
    echo 'Equal to 0.';
}
elseif($bytes < 0){
    echo 'Less than 0.';
}
于 2012-07-26T21:53:02.433 に答える
2

古い質問ですが、switch を使用する別の方法があります :) SitePoint で見つけました!

switch (true) {

    case $bytes == 0:      // result of this expression must be boolean
        echo 'Equal to 0.';
    break;

    case $bytes < 0:     // result also must be boolean
        echo 'Less than 0.';
    break;

    default:
}

説明: iftrue == ($bytes == 0)またはiftrue == ($bytes > 0)またはdefault:
switch (false) {}x != y

于 2014-06-03T14:33:26.363 に答える
0

switch ステートメントでは演算子を使用できません。実際には次のようになります。

$bytes = 0;
switch($bytes){
    case 0:
        echo 'Equal to 0.';
    break;
    default:
        echo 'Something else';
    break;
}

完全なドキュメントをご覧ください: http://www.php.net/manual/en/control-structures.switch.php

サンプルが「ゼロ未満」になるのはなぜですか? 簡単な質問: ($bytes < 0) は false と評価されます。そうではないからです。False は 0 に相当するため、$bytes に一致し、そのケースに該当します。

特定の範囲に一致させる必要がある場合は、if-else-constructs を使用する必要があります。

于 2012-07-26T21:55:26.480 に答える