Mar*_*ark 120 php parsing boolean
今天我正在玩PHP,我发现字符串值"true"和"false"在条件中没有被正确解析为boolean,例如考虑以下函数:
function isBoolean($value) {
if ($value) {
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我执行:
isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false
Run Code Online (Sandbox Code Playgroud)
它似乎只与"1"和"0"值一起使用:
isBoolean("1") // Returns true
isBoolean("0") // Returns false
Run Code Online (Sandbox Code Playgroud)
PHP中是否有一个本机函数将"true"和"false"字符串解析为boolean?
Eri*_*ron 389
有一个本机PHP方法,它使用PHP的filter_var方法:
$bool = filter_var($value, FILTER_VALIDATE_BOOLEAN);
Run Code Online (Sandbox Code Playgroud)
根据PHP的手册:
对于"1","true","on"和"yes",返回TRUE.否则返回FALSE.
如果设置了FILTER_NULL_ON_FAILURE,则仅为"0","false","off","no"和""返回FALSE,并为所有非布尔值返回NULL.
Arn*_*anc 14
原因是所有字符串true在将它们转换为布尔值时进行评估,除了"0"和""(空字符串).
以下函数将完全按照您的要求执行:它的行为与PHP完全相同,但也会将字符串计算"false"为false:
function isBoolean($value) {
if ($value && strtolower($value) !== "false") {
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
该文档解释说:http://php.net/manual/en/language.types.boolean.php:
转换为布尔值时,以下值被视为FALSE:
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空字符串,字符串"0"
- 一个零元素的数组
- 特殊类型NULL(包括未设置的变量)
- 从空标签创建的SimpleXML对象
每个其他值都被视为TRUE(包括任何资源).
仅在PHP中"0"或空字符串强制为false; 每隔一个非空字符串强制为true.从手册:
转换为布尔值时,会考虑以下值
FALSE:
- 空字符串,字符串"0"
你需要编写自己的函数来处理字符串"true"VS "false".在这里,我假设其他一切都默认为false:
function isBoolean($value) {
if ($value === "true") {
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在侧面说明,可以很容易地浓缩
function isBoolean($value) {
return $value === "true";
}
Run Code Online (Sandbox Code Playgroud)