这两个PHP函数产生相同的结果吗?

时间:2018-11-05 01:50:43

标签: 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['user_id'])){
        return true;
    }else{
        return false;
    }
 }

3 个答案:

答案 0 :(得分:0)

假设$_SESSION['user_id']是典型的数字ID,并且不等于0,则为是。唯一不同的情况是$_SESSION['user_id']实际上是false0''(空字符串)时。

答案 1 :(得分:0)

不,它们不相同,您可以对此进行测试

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

这将输出 true ,因为变量包含错误的已设置

因此,如果您的$_SESSION['user_id']isset进行了测试,则无论$_SESSION['user_id']是对还是假,它都会返回true

我认为您需要使用!empty()而不是isset()

答案 2 :(得分:0)

这取决于$ _SESSION ['user_id']是什么。

isset用于确定值不为null。这意味着当$ _SESSION ['user_id']为null时,isset将返回false。

但是'$ _SESSION ['user_id'] == true'的工作更为复杂。

  

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

因此,'$ _ SESSION ['user_id'] == true'是true还是false取决于$ _SESSION ['user_id']将被转换为什么。

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

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

PHP Booleans