我今天遇到了一个问题,(我设法解决了)。但是,我不明白为什么会这样。
我有这样的开关条件:
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
的变量
为什么会这样?
答案 0 :(得分:0)
为了比较两者,PHP必须将“2”转换为布尔值(switch语句使用松散比较,因此必须将不同类型的值转换为单个类型)。任何非零的东西都会转换为“true”。
答案 1 :(得分:0)
您的比较是针对非零值评估布尔值(true)(也为true)。测试是在真/假的情况下进行的,所以它通过了。