将字母与数字进行比较时,SWITCH returns 为真。为什么?
SWITCH returns TRUE when comparing letters to numbers. WHY?
简短问题:为什么?!?
以下class returns ALL ALLRIGHT调用时:Status::validate('ab')
class Status
{
const FRESH = 0;
const PENDING = 25;
const CANCELLED = 50;
public static function validate($status)
{
switch ($status) {
case self::FRESH:
case self::PENDING:
case self::CANCELLED:
echo 'ALL ALLRIGHT';
default:
echo 'ERROR!';
}
die;
}
}
破案
switch($condition){
case "options": blah(); break;
}
我相信这是因为你的 $status
被转换为 int。
$value = 'abc';
$other_value = '21abc';
echo (int)$value;
echo '<br>';
echo (int)$other_value;
会 return:
0
21
这会导致它认为 ab
值等于 Status::FRESH
我不确定 switch
语句是否执行此类类型转换。
编辑
我想我是对的。更多信息在这里 PHP Manual - switch.
关于将字符串类型转换为整数的参考 PHP Manual - Strings.
简短问题:为什么?!?
以下class returns ALL ALLRIGHT调用时:Status::validate('ab')
class Status
{
const FRESH = 0;
const PENDING = 25;
const CANCELLED = 50;
public static function validate($status)
{
switch ($status) {
case self::FRESH:
case self::PENDING:
case self::CANCELLED:
echo 'ALL ALLRIGHT';
default:
echo 'ERROR!';
}
die;
}
}
破案
switch($condition){
case "options": blah(); break;
}
我相信这是因为你的 $status
被转换为 int。
$value = 'abc';
$other_value = '21abc';
echo (int)$value;
echo '<br>';
echo (int)$other_value;
会 return:
0
21
这会导致它认为 ab
值等于 Status::FRESH
我不确定 switch
语句是否执行此类类型转换。
编辑
我想我是对的。更多信息在这里 PHP Manual - switch.
关于将字符串类型转换为整数的参考 PHP Manual - Strings.