作者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/cn.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