区分php的比较运算符:==和===

来源:互联网 发布:制作试卷的软件 编辑:程序博客网 时间:2024/06/03 21:37
在php中,定义了一组比较运算符,其中比较容易混淆的是==, !=, ===, !==这四个。在php规范中,比较运算符仅适用于数值或字符串两种类型的比较。由于php并不是一种从语法上严格类型检查的编程语言,在比较的过程中,如果两个比较对象的类型不同时,就会形成互相转换,更明确的说,字符串类型会被转义为数值类型。所以使用==和!=进行字符串比较就会非常危险。因为如果代码控制不好的情况下,就会出现字符串与数字比较的情况,尤其是与0比较的情况非常常见,这样的情况下,会出现非常多意外的逻辑错误。


举例说明:


例1:


<code>$test_string="01";
var_dump($test_string == 1);</code>


会输出: bool(true),原因是$test_string被类型转换为int,值为1。


例2:


<code>$test_string="test";
var_dump($test_string == 1);</code>


会输出:bool(false),原因是$test_string被类型转换为int,值为0。


例3:
<code>$test_string="test";
var_dump($test_string == 0);</code>


会输出:bool(true),这个是最常出现的错误,$test_string被转换为0,进行值比较,与0一致。


对!=是同理的,是进行值的比较,在比较的时候会进行类型转换。


为了避免这种情况,就需要使用===和!==,这种情况下,php会比较两个对象是否是完全一致的,也就是说,不会进行类型转换,是对象内容的直接比较。


例4:
<code>$test_string="test";
var_dump($test_string === 0);</code>


会输出:bool(false),因为从对象内容上,完全不同,与传统的比较结果是一致的。


例5:
<code>$test_string="test";
var_dump($test_string === "test");</code>


会输出:bool(true),因为值的内容是完全一致的。


所以如果比较两个字符串是否值相同,或不同,建议使用===和!==,会更加安全。同样也可以使用strcmp,也会比==与!=安全了很多。


典型的错误情况如:
http://stackoverflow.com/questions/26213965/php-if-sentence-is-run-but-dumps-says-it-shouldnt

等等。

转载请注明来源自: www.candylog.com

0 0
原创粉丝点击