Skip to content

php中的==与===

2009 十二月 13
tags:
by 荒野无灯

php是一种弱类型的脚本语言,因此,通常变量都不需要定义即可使用。
弱类型并不等于不区分类型,如果随便使用变量,有时候可能会出问题。
比如 register_globals为on的时候,由于变量(通常是get传递值过来的)未初始化而导致sql注射漏洞产生(这样的例子很多)。因此初始化变量是个良好的习惯。
比如康盛的discuz,凡是它要用到的变量,一律先初化:

1
2
3
$id=0;
$string='';
$arrary=array();

而且在使用完了以后,马上unset之。
扯远啦,该回到正题。
在做blogshow 时,分类的url处理出了点小问题,可是在本地测试时是没有问题的。
由于我是直接修改在服务器上的代码的,而不是上传覆盖之。因此我判断可能是if语句那里出了问题,ftp,打开文件一看,果然,

1
if($config['urlrewrite']===1)

这一句出了问题,因为在赋值时是:

1
$config=array('urlrewrite'=>'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填写您的邮件地址,订阅我们的精彩内容:,欢迎点击这里捐赠以支持荒野无灯转播到腾讯微博 转播到腾讯微博

作者:荒野无灯
出处:Hacklog【Hacklog】

声明: 本站遵循 署名-非商业性使用-相同方式共享 3.0 共享协议. 转载请注明转自Hacklog【荒野无灯weblog】

本文链接: http://ihacklog.com/?p=3388

5 Responses Post a comment
  1. 十二月 13, 2009

    这个和 Javascript 里是一样的呵

  2. 十二月 13, 2009

    学习了。==是等值,===是等价

    if($config['urlrewrite']) 直接这样判断 也行。

    • 十二月 13, 2009

      @crossyou, 嗯,对的,不过有时候这样判断会出问题,比如数据库获得的值,如果那个值正好是0,那么这个if条件为假,但实际返回了数据,应该为真的。

  3. 十二月 13, 2009

    恩,在学PHP基础的时候,就学了这个

  4. 十二月 13, 2009

    我直接$getusername=$_GET['id']

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <q cite=""> <strong>

 :wink:  :-|  :-x  :twisted:  :)  8-O  :(  :roll:  :-P  :oops:  :-o  :mrgreen:  :lol:  :idea:  :-D  :evil:  :cry:  8)  :arrow:  :-?  :?:  :!:

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS