将字母与数字进行比较时,SWITCH返回TRUE。为什么?

时间:2015-09-24 13:24:46

标签: php switch-statement

简短的问题:为什么?!?

以下课程在致电时发送 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;
    }
}

2 个答案:

答案 0 :(得分:4)

我相信它是因为你的$value = 'abc'; $other_value = '21abc'; echo (int)$value; echo '<br>'; echo (int)$other_value; 正在被转换为int。

0
21

将返回:

ab

这会导致它认为Status::FRESH值等于switch

我不确定FROM centos:latest ENV BLABLA hello RUN echo $BLABLA # outputs: "hello" 语句是否进行了这种类型转换。

修改

我认为我是对的。更多信息PHP Manual - switch
关于在此处将字符串转换为整数的引用PHP Manual - Strings

答案 1 :(得分:-1)

打破案件

$status