奇怪的 php 如果行为与强制转换为布尔整数


Strange php if behaviour with casted to boolean int

让我们看看是否有人可以帮助我。

我有一个名为 ret_error() 的函数,当访问数据库中的表时出错时会调用它,这意味着"无法连接"、"找不到记录"等等。此函数返回一个包含两个键的数组,如下所示

array('error' => true, 'code' => Model::RECORD_NOT_FOUND);

如果我调用一个返回用 ret_error() 构建的数组的函数并检查数组,它就像

$result = array('error' => 1, 'code' => Model::RECORD_NOT_FOUND);

但是当我用"如果"进行评估时

if (!$result['error']) {
   do something;
}
else {
   do something else;
}

即使我投射到布尔值,也总是被评估为假。

如果计算为 int,例如

if ($result['error'] != 1) {

我错过了什么吗?

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

  • 布尔值 FALSE 本身
  • 整数 0(零)
  • 浮点数 0.0(零)
  • 空字符串和字符串"0"
  • 包含零元素的数组
  • 成员变量为零的对象(仅限 PHP 4)
  • 特殊类型 NULL(包括未设置的变量)
  • 从空标记创建的简单 XML 对象

简而言之,0 为 False,所有其他值为 True我建议快速破解

if($result['error'] === true || $result['error'] === 1) {
   //logic
}