这两个php函数是否产生相同的结果?

这两个php函数是否产生相同的结果?,php,isset,Php,Isset,我目前正在学习一门PHP课程,我很好奇这两个函数是否产生相同的结果,一个比另一个更有效?如果是,请解释,谢谢 public function is_logged_in(){ if ($_SESSION['user_id'] == true){ return true; }else{ return false; } } public function is_logged_in(){ if (isset($_SESSION['us

我目前正在学习一门PHP课程,我很好奇这两个函数是否产生相同的结果,一个比另一个更有效?如果是,请解释,谢谢

public function is_logged_in(){
    if ($_SESSION['user_id'] == true){
        return true;
    }else{
        return false;
    }
}



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

假设
$\u会话['user\u id']
是一个典型的数字id,不等于0,则为是。唯一不同的情况是
$\u SESSION['user\u id']
字面上是
false
0
'
(空字符串)。

不,它们不一样,您可以测试一下

<?php
$falseVar = false;
var_dump(isset($falseVar));

这取决于$\u会话['user\u id']是什么

isset用于确定值不为空。这意味着当$\u会话['user\u id']为空时,isset将返回false

但是“$”会话['user\u id']==true”的工作更复杂

如果运算符、函数或控件结构需要布尔参数,则会自动转换值

因此,$\u会话['user\u id']==true'是真是假取决于$\u会话['user\u id']将转换为什么

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

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象

为什么
$\u会话['user\u id']
是布尔值?这部分取决于错误报告级别。如果未设置用户id,第一个函数将抛出通知错误。$\u会话['user\u id']='';