空字符串是否相当于布尔值 false

Nge*_*azy 0 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');
   }
Run Code Online (Sandbox Code Playgroud)

根据我有限的理解,该函数is_logged_in()返回一个布尔值,我注释的行上的条件是检查返回的值是否不等于空字符串。这是正确的方法吗?如果有人可以解释发生了什么我会很高兴。我是初学者,所以如果我的问题有点愚蠢,请原谅我。

Nai*_*ncy 6

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

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

这里需要理解的重要一点是“布尔值不等于空字符串”

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

可能为您提供的解决方案

  • 处理函数中的 else 情况并return false
  • 使用空函数if(!empty($reg_user->is_logged_in()))

从手册中:

以下内容被认为是空的:

  • “”(空字符串)
  • 0(0 作为整数)
  • “0”(0 作为字符串)
  • 无效的
  • 错误的
  • array() (空数组)
  • var $var; (声明了一个变量,但在类中没有值)

我希望这能帮助你理解。