奇怪的PHP如果行为与铸造布尔int

时间:2015-01-30 09:31:13

标签: php arrays if-statement

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

我有一个名为ret_error()的函数,当访问数据库中的表时出现错误,这意味着,"无法连接","记录未找到&#34 34;就这样。此函数返回一个包含两个键的数组,如

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

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

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

但是当我用' if'

进行评估时
if (!$result['error']) {
   do something;
}
else {
   do something else;
}

即使我转换为布尔值,也总是被评估为false。

如果将其评估为int(例如

),则此方法可正常工作
if ($result['error'] != 1) {

我有什么遗失的吗?。

1 个答案:

答案 0 :(得分:0)

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

  • 布尔值FALSE本身
  • 整数0(零)
  • 浮点数0.0(零)
  • 空字符串,字符串“0”
  • 包含零元素的数组
  • 一个零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标签创建的SimpleXML对象

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

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