空字符串等效于布尔值false

时间:2017-03-03 10:48:25

标签: php

我有以下代码

public function is_logged_in()
 {
   if(isset($_SESSION['userSession']))
   {
     return true;
    }
  }

  if($reg_user->is_logged_in()!="")//I don't understand this evaluation
   {
     $reg_user->redirect('home.php');
   }

从我有限的理解,函数is_logged_in()返回一个布尔值,我评论的行上的条件是检查返回的值是否不等于空字符串。这是正确的做法它?如果有人能解释发生了什么,我会很高兴。我是初学者,请原谅我,如果我的问题有点傻。

2 个答案:

答案 0 :(得分:3)

在您的函数中,is_logged_in有两种情况:

  • 如果设置了会话,则返回 True (布尔值)
  • 如果未设置会话,则函数将返回 null

需要理解的重点是"布尔值不等于空字符串"

var_dump(true != ''); // true  {As boolean not equal to empty string; return true}
var_dump(null != ''); // false

可能的解决方案

  • 处理函数中的其他案例和return false
  • 使用空函数if(!empty($reg_user->is_logged_in()))

从手册:

以下内容被认为是空的:

  • "" (空字符串)
  • 0(0为整数)
  • " 0" (0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • var $ var; (声明的变量,但在类中没有值)

我希望这会帮助你理解。

答案 1 :(得分:0)

如果您想检查$reg_user->is_logged_in()的结果是否为空字符串,则必须使用此字段:

if ($reg_user->is_logged_in() !== "")

三重比较确保类型也相同。

例如,('' == false)将返回true,但('' === false)将返回false。