首頁  >  文章  >  後端開發  >  有關於isset和empty的問題?

有關於isset和empty的問題?

WBOY
WBOY原創
2016-10-22 00:14:091272瀏覽

最近在看session的問題,需要判斷使用者是否登錄,我發現以下2種方法都可以成功判斷是否登入的問題。
程式碼如下:

<code>第一种:
if(empty($_SESSION)){

    echo '您还未登录,请<a href="login.php">登录</a><p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a><p>';
}

第二种:
if(!isset($_SESSION['uname'])){

    echo '您还未登录,请<a href="login.php">登录</a><p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a><p>';
}

</code>

問題:在第二個判斷語句中,如果只寫$_SESSION而不是$_SESSION['uname']的話,會報錯,而使用第一種方法的話,empty後邊的括號內無論是$_SESSION['uname ']還是$_SESSION都沒問題,請問是什麼原因呢?兩種方法哪一種會好一點?或者說是更安全一點?謝謝

回覆內容:

最近在看session的問題,需要判斷使用者是否登錄,我發現以下2種方法都可以成功判斷是否登入的問題。
程式碼如下:

<code>第一种:
if(empty($_SESSION)){

    echo '您还未登录,请<a href="login.php">登录</a><p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a><p>';
}

第二种:
if(!isset($_SESSION['uname'])){

    echo '您还未登录,请<a href="login.php">登录</a><p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a><p>';
}

</code>

問題:在第二個判斷語句中,如果只寫$_SESSION而不是$_SESSION['uname']的話,會報錯,而使用第一種方法的話,empty後邊的括號內無論是$_SESSION['uname ']還是$_SESSION都沒問題,請問是什麼原因呢?兩種方法哪一種會好一點?或者說是更安全一點?謝謝

建議使用第二種。在正確使用第二種的前提下,程式碼會更加嚴謹。
empty是是否為空,isset是變數是否存在。
只要你開啟session功能,session_start();那麼就會有個陣列變數$_SESSION存在。
但是如果你沒有登錄,$_SESSION就只是個空數組,只有你登陸了,才會往$_SESSION這個數據寫數據,比如
$_SESSION['uname']。
所以第二個只寫$_SESSION會報錯的原因,就是你尚未登陸,所以$_SESSION['uname']不存在,但是$_SESSION作為一個空數組是存在的。

empty 判斷參數是否被視為空。即使參數存在,但是他的值為false,參數依舊會被認為是空。

if(isset($_SESSION['uname']) && !empty($_SESSION['uname'])){//這樣好了呀

}

isset和empty的區別:empty()和isset()的處理對象無外乎未定義變量,0,空字串。 

<code>如果变量为0,则empty()会返回TRUE,isset()会返回TRUE; 
如果变量为空字符串,则empty()会返回TRUE,isset()会返回TRUE; 
如果变量未定义,则empty()会返回TRUE,isset()会返回FLASE; </code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn