PHP切换条件捕获无与伦比的条件

时间:2013-11-22 04:02:00

标签: php switch-statement

我今天遇到了一个问题,(我设法解决了)。但是,我不明白为什么会这样。

我有这样的开关条件:

switch( $message['approval_status'] ){
    case self::APPROVED:
       $state['approved'] = true;
       break;
    // other irrelevant conditions
    default:
       break;
}

哪里

const APPROVED = 2

我传入了2个变量,

如果我使用此功能两次,一次使用

$message['approval_status'] = 1和另一个

$message['approval_status'] = true

上面的switch语句按预期传递整数,即转到默认条件。但是,即使$message['approval_status'] = true

case self::APPROVED:也会抓住包含self::APPROVED = 2的变量

为什么会这样?

2 个答案:

答案 0 :(得分:0)

为了比较两者,PHP必须将“2”转换为布尔值(switch语句使用松散比较,因此必须将不同类型的值转换为单个类型)。任何非零的东西都会转换为“true”。

答案 1 :(得分:0)

您的比较是针对非零值评估布尔值(true)(也为true)。测试是在真/假的情况下进行的,所以它通过了。