作者cf1064 (蚵仔)
看板PHP
標題Re: [請益] php if的判斷
時間Tue Sep 23 22:17:24 2014
※ 引述《heavenbetula (綠草)》之銘言:
: 小弟初學php,看書上範例不是很懂,想麻煩各位大大解惑
: 以下是書中擷取的一小段程式:
: session_start();
: if(!session_is_registered("userIP")){
: session_register("userIP");
: $_SESSION["userIP]=$this->getIP;
: $sql="update dailyistics set visitNum=visitNum+1 where visitDate='" . $setDate .
: "'";
: mysql_query($sql);
: }else{
: $_SESSION["userIP"]=$this->getIP;
: }
: 其中,getIP是一個function的名稱(有傳回值)
: 我的問題是,為什麼在做if判斷的時候,userIP都還沒有給值,卻可以做判斷呢?
: 因為不是在if中的$_SESSION["userIP] = $this->getIP,userIP才有值,那怎麼沒值可以
: 先判斷?
http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=651
session_is_registered --- 判斷變數是否已經登記
語法 : bool session_is_registered (string name)
說明 :
如果變數name在目前的session中已經登記過了,則session_is_registered( )傳回true。
所以,如果一開始就沒有,你的session_is_registered("userIP")就會回傳false
然後前面加一個!就是false變true,所以就執行if裡面的東東(登記後給值),他不是指有沒有給值而是
指是否登記
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.18.11
※ 文章網址: http://webptt.com/m.aspx?n=bbs/PHP/M.1411481846.A.8DC.html
1F:推 heavenbetula: 那這樣session_is_registered("userIP")一定 09/23 22:28
2F:→ heavenbetula: 沒有登記囉?因為userIP還沒有值 09/23 22:28
3F:→ heavenbetula: 然後因為!的原因所以一定會執行 if裡面的動作嗎/ 09/23 22:29
4F:→ MOONRAKER: session_is_registered()在5.4已經入土為安了 09/23 22:32
5F:→ MOONRAKER: 相同功能請大方使用isset($_SESSION['userIP']) 09/23 22:33
6F:→ heavenbetula: 5.2.6版本可以使用5.4的語法嗎? 09/23 22:34
7F:推 heavenbetula: 抱歉突然覺得上句這個問題很蠢...我去更新= =' 09/23 22:36
8F:→ cf1064: 如果你只有這個頁面,第一次進入,IF判斷結果應該是TRUE 09/24 00:24
9F:→ cf1064: 然後就會執行到 session_register('userIP'); 09/24 00:25
10F:→ cf1064: 這時候userip就會被登記,然後當你重新整理時 09/24 00:26
11F:→ cf1064: 因為userip被登記且還存在,if的判斷結果會變false 09/24 00:27
12F:→ cf1064: session_is_registered('userIP')=true,! true就是false 09/24 00:28
13F:→ cf1064: 就不會執行if內的東西 09/24 00:29
14F:→ cf1064: 不過這個的確之後版本拿掉了,改成isset是一樣的運作原理 09/24 00:30
15F:→ cf1064: 另外登記和給值是不一樣的事情唷 09/24 00:42
16F:→ cf1064: 早期版本要用session,你要先登記,才能給值 09/24 00:43
17F:→ cf1064: session_register('userIP');把他當成是宣告一個變數 09/24 00:45
18F:→ cf1064: $_SESSION['userIP]=$this->getIP; 就是給變數一個值 09/24 00:46
19F:→ cf1064: session_is_registered('userIP')就是指這個變數是否存在 09/24 00:47
20F:→ cf1064: 如果你宣告一個變數,不給值,判斷他是否存在時 09/24 00:47
21F:→ cf1064: 那麼結果會是存在,除非你是判斷這個變數裡有沒有值 09/24 00:48
22F:→ MOONRAKER: 試試看便知,記得滿早就可以用isset()檢查session了 09/24 09:55
23F:推 heavenbetula: 感謝各位大大熱心的解惑! 09/24 19:19
24F:推 heavenbetula: 請問為什麼我改為isset($_SESSION['userIP'])後 09/25 20:30
25F:→ heavenbetula: 永遠都不會去執行else...這樣結果不對啊> <" 09/25 20:30
26F:→ heavenbetula: 也就是變if(!isset($_SESSION['userIP'])) 09/25 20:32
27F:→ heavenbetula: 然後session_register("userIP");這行刪除 09/25 20:33