区分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
举例说明:
例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
- 区分php的比较运算符:==和===
- PHP-比较运算符- == 和 ===
- php 比较运算符'=='的使用技巧
- ==和equals比较运算符
- ==和equals比较运算符
- Java中的equals方法和比较运算符”==“的使用和比较
- c++ 和 php 中的 = 运算符
- Java中==比较运算符和equals详解
- equals和==的区分
- +,<,>,<=,>=的运算比较规则
- 区分==和equal
- js中比较运算符'=='和'==='的区别
- 在Java中,用作字符串比较的运算符" == "和".equals()"的区别
- Python中的比较运算符,要特别注意的是 == 和 is 的区别
- PHP中比较运算符之==与===
- java中string对象的”equal“方法和“==”运算符 与 c#中的比较
- JS的"=="和 is(expr) 区别及比较运算符介绍
- java运算符的比较:==和equals,compareTo()
- struts学习之入门级
- Merge Two Sorted Lists
- 数组中的逆序对
- 黑马程序员------object-c面向对象_继承
- 得到
- 区分php的比较运算符:==和===
- html中去掉超链接下划线
- 小白学c++之多线程同步互斥封装
- #ifndef
- Microsoft Research 展示超高精准度的手部追踪技术
- 【重读设计模式】单体模式
- 关于winodws中的hiberfil.sys文件
- android开发学习(三)——sharedPreference,xml文件序列化和反序列
- Nixie:戴在腕上的四轴「摄影师」