php中的==与===

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填写您的邮件地址,订阅我们的精彩内容:

相关日志

回复 (5)

  1. 依云  / 回复

    这个和 Javascript 里是一样的呵

  2. crossyou  / 回复

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

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

    • 荒野无灯  / 回复

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

  3. 万戈  / 回复

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

  4. Jerry Chen  / 回复

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

发表评论 修改评论取消编辑

允许使用的标签 - 您可以在评论中使用如下的 HTML 标签以及属性。

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

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

引用通告 (0)

› 尚无引用通告。

开灯