将字母与数字进行比较时,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.