这很奇怪
var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN));
var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN));
bool(true)
bool(false)
我在这里错过了什么?他们当然应该是真的吗?如果不是,我如何验证假布尔值?
编辑:澄清。 我需要验证一个假布尔值。确保它不是字符串,int,float或其他任何东西。 e.g。
$var = false; //true
$var = true; //true
$var = 'foo'; //false
$var = 1; //false
也许我错误地提出了我的问题,或者我已经进化了太多广告,我应该问另一个问题。
我去的解决方案是:
$result = filter_var($bool, FILTER_VALIDATE_BOOLEAN) && ($bool===true||$bool===false);
答案 0 :(得分:1)
从手册: -
如果设置了FILTER_NULL_ON_FAILURE,则仅为“0”,“false”,“off”,“no”和“”返回FALSE,并为所有非布尔值返回NULL。
设置此项,如果返回null
,则表示没有bool(或boolish)值。
例如: -
var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
var_dump(filter_var(2, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
但是,is_bool()
可能更合适。