奇怪的php if行为,强制转换为布尔int

奇怪的php if行为,强制转换为布尔int,php,arrays,if-statement,Php,Arrays,If Statement,让我们看看是否有人能帮我 我有一个名为ret_error()的函数,当访问数据库中的表时发生错误时会调用它,这意味着“无法连接”、“未找到记录”等等。此函数返回一个包含两个键的数组,如下所示 array('error' => true, 'code' => Model::RECORD_NOT_FOUND); 如果我调用一个函数,返回一个用ret_error()构建的数组,然后检查数组,就像 $result = array('error' => 1, 'code' =>

让我们看看是否有人能帮我

我有一个名为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;
}
“始终”的计算结果为false,即使我强制转换为布尔值

如果将其计算为int(如

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

是否缺少某些内容?

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

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象
简而言之,0为False,所有其他值为True 我建议你赶快动手

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

如果($result['error']==true)呢?这样三个
==
将强制完全相等。正如您所知,在编程中,
0
被解释为
false
1
被解释为
true
。即使是OT,我也不能不这样说。PHP很愚蠢:“空字符串和字符串“0”!我非常讨厌。。。该死的,为什么非空字符串“0”是假的?这一直困扰着我。。。附言:我从PHP4开始就是一名PHP开发人员,我可以说PHP很蠢:-)哈哈,你说得对。我仍然认为,他们可能有一个很好的历史原因,使它的工作方式。同时,整数0为False,因此字符串“0”也为False更有意义。否则,如果将int 0转换为字符串“0”,则基本上会将其从False转换为True(这可能会导致混淆)。我部分同意你的观点,但根据我的个人经验,我发现的唯一一个反复出现的错误是有人在条件语句中检查字符串(即检查是否提供了输入)你不能责怪初级开发人员没有使用
if(strlen($string))…
而不是
if($string).
,我责怪语言!:-)