深入PHP中慎用双等于(==)的详解
PHP比较运算符出现的频率实在是太高了,尤其是 ==
if(a == b){
// do something
}
但是,你真的掌握了 == 了吗?细节很重要!
来看下面的代码,说出你认为正确的答案
var_dump(' 123fg456'==123);
var_dump('some string' == 0);
var_dump(123.0 == '123d456');
var_dump(0 == "a");
var_dump("1" == "01");
var_dump("1" == "1e0");
先想出你的答案,然后再运行一次看看。如果答案没有差错,那么恭喜你,基础知识很扎实。
解释:
如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于 switch 语句。
特别注意,字符串转换为整数时,是从左到右,直到遇到非数字字符为止。也就是说 '123abc456' 会被转换成 123,而不是 123456。另外字符串开始的空格会被忽略,比如 ' 234abc' 转换为 234。
下面附上松散比较和严格比较的对照表
相关推荐
-
深入PHP中慎用双等于(==)的详解
PHP比较运算符出现的频率实在是太高了,尤其是 ==if(a == b){// do something}但是,你真的掌握了 == 了吗?细节很重要!来看下面的代码,说出你认为正确的答案var_dump(' 123fg456'==123);var_dump('some string' == 0);var_dump(123.0 == '123d456');var_dump(0 == "a");var_dump("1" == "01");var_d
-
ruby中的双等号==问题详解
前两天在写代码的时候,突然收到警告说项目代码中存在 XSS 漏洞,遂立即根据报告的 URL 排查页面代码,虽然很快就修复了,而且同样问题的讨论两年前就有了,一般来说相对有经验的同学也应该都知道这个点,但是还是觉得有必要写出来,再次提醒一下其他小伙伴,避免踩坑. 问题根源 其中,在找到的漏洞出现的地方,都存在类似以下这样的 slim 代码: input class='xxx' value==params[:account] 问题就出在双等号 == 上,因为在 slim 跟 ERB 模板(其他模板比
-
mysql中的不等于实例详解
目录 mysql中的不等于 补充:MySQL查询:不等于的使用方法(mysql查询不等于) mysql中的不等于 在mysql中的不等于,<>,!=,is not 多说无益,来个实例!!! 一个简单地表数据: select * from user where address != "北京" select * from user where address <> "北京" select * from user where address =
-
JSP中EL表达式的用法详解(必看篇)
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );
-
python中模块的__all__属性详解
python模块中的__all__属性,可用于模块导入时限制,如: from module import * 此时被导入模块若定义了__all__属性,则只有__all__内指定的属性.方法.类可被导入. 若没定义,则导入模块内的所有公有属性,方法和类 # kk.py class A(): def __init__(self,name,age): self.name=name self.age=age class B(): def __init__(self,name,id): self.nam
-
MySQL数据类型中DECIMAL的用法实例详解
MySQL数据类型中DECIMAL的用法实例详解 在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮点列的值被四舍五入到这个列所指定的十进制数.如果在一个FLOAT(8, 1)的列中存储1. 2 3 4 5 6,则结果为1. 2.如果将相同的值存入FLOAT(8, 4) 的列中,则结果为1. 2 3 4 6. 这表示应该定义具有足够位数的浮点列以便
-
JavaScript中浅讲ajax图文详解
1.ajax入门案例 1.1 搭建Web环境 ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 对于JavaWeb项目而言,ajax主要用于浏览器和服务器之间数据的传输. 如果是单单地堆砌知识点,会显得比较无聊,那么根据惯例,我先不继续介绍ajax,而是来写一个案例吧. 打开
-
Java中Math类常用方法代码详解
近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void main(String args[]){ /** *Math.sqrt()//计算平方根 *Math.cbrt()//计算立方根 *Math.pow(a, b)//计算a的b次方 *Math.max( , );//计算最大值 *Math.min( , );//计算最小值 */ System.out.pri
-
java 中file.encoding的设置详解
java 中file.encoding的设置详解 昨天有人在讨论关于设置System的property,file.encoding 修改defaultcharset无效 Properties pps=System.getProperties(); pps.setProperty("file.encoding","ISO-8859-1"); 在java中,如果没有指定charset的时候,比如new String(byte[] bytes),都会调用Charset.d
-
C++ 中消息队列函数实例详解
C++ 中消息队列函数实例详解 1.消息队列结构体的定义 typedef struct{ uid_t uid; /* owner`s user id */ gid_t gid; /* owner`s group id */ udi_t cuid; /* creator`s user id */ gid_t cgid; /* creator`s group id */ mode_t mode; /* read-write permissions 0400 MSG_R 0200 MSG_W*/ ul
随机推荐
- JavaScript 异步调用
- “按键精灵” 的使用教程之(工具命令生成器 )
- Powershell 获取特定的网页信息的代码
- 原生js实现水平方向无缝滚动
- Python数据结构与算法之图结构(Graph)实例分析
- js跑马灯代码(自写)
- php中自定义函数dump查看数组信息类似var_dump
- 安装配置php-fpm来搭建Nginx+PHP的生产环境
- python使用PyGame播放Midi和Mp3文件的方法
- TextView显示系统时间(时钟功能带秒针变化
- JavaScript Base64编码和解码,实现URL参数传递。
- 网站生成静态页面攻略4:防采集而不防搜索引擎策略
- Lua中的数学库总结
- Jquery显示、隐藏元素以及添加删除样式
- thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
- Android TextView预渲染研究
- C#中的委托使用
- .NET读写Excel工具Spire.Xls使用入门教程(1)
- Spring Boot配置Swagger的实现代码
- AndroidStduio3.0 使用gradle将module打包jar文件的方法