在 PHP 中将字符串解析为布尔值

2022-08-30 06:54:12

今天我正在玩PHP,我发现字符串值“true”和“false”在某种条件下没有被正确地解析为布尔值,例如考虑以下函数:

function isBoolean($value) {
   if ($value) {
      return true;
   } else {
      return false;
   }
}

如果我执行:

isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false

它似乎只适用于“1”和“0”值:

isBoolean("1") // Returns true
isBoolean("0") // Returns false

PHP中是否有本机函数将“true”和“false”字符串解析为布尔值?


答案 1

有一个本地的PHP方法可以做到这一点,它使用PHP的filter_var方法:

$bool = filter_var($value, FILTER_VALIDATE_BOOLEAN);

根据PHP的手册

返回 TRUE 表示“1”、“true”、“on”和“yes”。否则返回 FALSE。

如果设置了FILTER_NULL_ON_FAILURE,则仅对“0”、“false”、“off”、“no”和 “”返回 FALSE,对所有非布尔值返回 NULL。


答案 2

原因是,当将所有字符串转换为布尔值时,所有字符串的计算结果都为 to,但 and (空字符串)除外。true"0"""

以下函数将完全按照您的要求执行操作:它的行为与 PHP 完全相同,但也会将字符串计算为 :"false"false

function isBoolean($value) {
   if ($value && strtolower($value) !== "false") {
      return true;
   } else {
      return false;
   }
}

文档解释说:http://php.net/manual/en/language.types.boolean.php

转换为布尔值时,以下值被视为 FALSE:

  • 布尔 FALSE 本身
  • 整数 0(零)
  • 浮点数 0.0(零)
  • 空字符串和字符串“0”
  • 具有零元素的数组
  • 特殊类型 NULL(包括未设置的变量)
  • 从空标签创建的 SimpleXML 对象

所有其他值都被视为 TRUE(包括任何资源)。


推荐