我目前正在学习一门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;
}
}
假设$_SESSION['user_id']
是一个典型的数字ID,并且不等于0,那么是。唯一不同的情况是$_SESSION['user_id']
实际上是false
、0
或''
(空字符串(。
不,它们不一样,你可以测试这个
<?php
$falseVar = false;
var_dump(isset($falseVar));
这将输出true,因为设置了一个包含false的变量。
因此,如果你的$_SESSION['user_id']
用isset
测试,无论$_SESSION['user_id']
是真还是假,它都会返回真
我认为你需要使用!empty()
而不是isset()
这取决于$_SESSION['user_id']是什么。
isset用于确定一个值不是null。这意味着当$_SESSION['user_id']为null时,isset将返回false。
但是'$_SESSION['user_id']==true'的工作更为复杂。
如果运算符、函数或控制结构需要布尔参数,则会自动转换值。
因此,'$_SESSION['user_id']==true'是true还是false取决于$_SESSION['user_I']将被转换为什么。
当转换为布尔值时,以下值被视为FALSE:
- 布尔值FALSE本身
- 整数0(零(
- 浮点0.0(零(
- 空字符串和字符串"0">
- 零元素数组
- 特殊类型NULL(包括未设置的变量(
- 从空标记创建的SimpleXML对象
PHP布尔型