$bytes = 0;
switch($bytes){
case $bytes == 0:
echo 'Equal to 0.';
break;
case $bytes < 0:
echo 'Less than 0.';
break;
}
これは「0未満」を出力します。
なんで?
$bytes = 0;
switch($bytes){
case $bytes == 0:
echo 'Equal to 0.';
break;
case $bytes < 0:
echo 'Less than 0.';
break;
}
これは「0未満」を出力します。
なんで?
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.';
}
古い質問ですが、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
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 を使用する必要があります。