php中的==与===
2009 十二月 13
php是一种弱类型的脚本语言,因此,通常变量都不需要定义即可使用。
弱类型并不等于不区分类型,如果随便使用变量,有时候可能会出问题。
比如 register_globals为on的时候,由于变量(通常是get传递值过来的)未初始化而导致sql注射漏洞产生(这样的例子很多)。因此初始化变量是个良好的习惯。
比如康盛的discuz,凡是它要用到的变量,一律先初化:
如
1 2 3 |
而且在使用完了以后,马上unset之。
扯远啦,该回到正题。
在做blogshow 时,分类的url处理出了点小问题,可是在本地测试时是没有问题的。
由于我是直接修改在服务器上的代码的,而不是上传覆盖之。因此我判断可能是if语句那里出了问题,ftp,打开文件一看,果然,
1 | if($config['urlrewrite']===1) |
这一句出了问题,因为在赋值时是:
1 |
这里的urlrewrite的值实际上是字符值,而不是数字。一般情况下是不会出问题的。但是如果用===来判断就出问题了,
1 | if($config['urlrewrite']===1) |
这一句左边是字符值,右边却是数字,显然结果为false 。
解决办法是用
1 | if($config['urlrewrite']==1) |
或者
1 | if($config['urlrewrite']==='1') |
来判断。
为什么这样呢?这里解释下。
1 2 | $a == $b;// Equal TRUE if $a is equal to $b. $a === $b;// Identical TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4) |
上面是手册中的说明,意思就是说,==是不判断二者是否是同一数据类型,而===是更为严格的比较,它不但要求二者值相等,而且还要求它们的数据类型也相同。
5 Responses
Post a comment










这个和 Javascript 里是一样的呵
学习了。==是等值,===是等价
if($config['urlrewrite']) 直接这样判断 也行。
@crossyou, 嗯,对的,不过有时候这样判断会出问题,比如数据库获得的值,如果那个值正好是0,那么这个if条件为假,但实际返回了数据,应该为真的。
恩,在学PHP基础的时候,就学了这个
我直接$getusername=$_GET['id']