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) |
上面是手册中的说明,意思就是说,==是不判断二者是否是同一数据类型,而===是更为严格的比较,它不但要求二者值相等,而且还要求它们的数据类型也相同。
喜欢这篇文章吗?
请订阅本站 RSS feed 或




1:46 下午, 2009年12月13日依云 /
这个和 Javascript 里是一样的呵
10:16 上午, 2009年12月13日crossyou /
学习了。==是等值,===是等价
if($config['urlrewrite']) 直接这样判断 也行。
11:54 上午, 2009年12月13日荒野无灯 /
@crossyou, 嗯,对的,不过有时候这样判断会出问题,比如数据库获得的值,如果那个值正好是0,那么这个if条件为假,但实际返回了数据,应该为真的。
7:53 上午, 2009年12月13日万戈 /
恩,在学PHP基础的时候,就学了这个
6:42 上午, 2009年12月13日Jerry Chen /
我直接$getusername=$_GET['id']