$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 を使用する必要があります。