深入解析PHP中逗号与点号的区别


Posted in PHP onAugust 05, 2013
 echo 'abc'.'def'; //用点号连接字符串 
 echo 'abc','def'; //用逗号连接字符串

那么下面我们就举一些例子.来认清楚他们之前的区别.
 echo '1+5=' . 1+5;

看看上面的.输出的结果是6..而不是1+5=6.有些神奇吧?
更神奇的是你看下面的例子.
 echo "1+5=" . 5+1;  //输出2

结果十分奇怪.我们看到.我们把5和1换下位置.结果就变成2了.
为什么会这样.难道在PHP中加法是没有交换律的?当然不是..
我们先不去想为什么.如果我把上面的点号换成逗号试下.
 echo '1+5=' , 5+1;  //输出 1+5=6 
 echo '1+5=' , 1+5;  //输出 1+5=6

可以看出.只有使用逗号我们才可以得到意料中的结果.
那为什么点号就不行呢?逗号为什么就行呢?
 echo ('1+5' . 5)+1; //输出2

我们给前面的加个括号后.得到的结果是一样的.证明PHP是先连接字符串再进行加法计算了.按照从左向右的方向进行的.

那么好.既然是先连接的字符串.那么就应该是"1+55"了.然后再用这个字符串加上1.那为什么就会输出2呢?
这个跟PHP中字符串变成数字的机制是相关的.我们来看下面的例子

 echo (int)'abc1';  //输出0 
 echo (int)'1abc'; //输出1 
 echo (int)'2abc'; //输出2 
 echo (int)'22abc'; //输出22

从上面的例子我们可以看出.如果将一个字符串强制转换成一个数字.PHP会去搜索这个字符串的开头.如果开头是数字就转换.如果不是就直接返回0.

回到刚才的1+55.既然这个字符串是1+55.所以强制类型转换后就应该是1了.在此基础上加1.当然是2了.
为了证明我们的猜想.我们来验证一下.

 echo '5+1=' . 1+5; //输出10 
 echo '5+1=' . 5+1; //输出6 
 echo '1+5=' . 1+5; //输出6 
 echo '1+5=' . 5+1; //输出2

结果证明.我们的设想是正确的.
那么为什么使用逗号就没有上面的问题了呢?
手册上说了.用逗号是multiple parameters.
也就是说是多参数.换句话说.
逗号分隔开的就相当于是N个参数.也就是说把echo当个函数用.
这样的话.echo会对每个参数先进行计算.最后再进行连接后输出.所以我们用逗号就不存在上面的问题了
PHP 相关文章推荐
模板引擎正则表达式调试小技巧
Jul 20 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 PHP
php统计文章排行示例
Mar 04 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
php+mysql数据库查询实例
Jan 21 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
php生成图片验证码
Jun 09 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
php查询及多条件查询
Feb 26 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
PHP code 验证码生成类定义和简单使用示例
May 27 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 #PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 #PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 #PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 #PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 #PHP
php多层数组与对象的转换实例代码
Aug 05 #PHP
注意:php5.4删除了session_unregister函数
Aug 05 #PHP
You might like
php mssql 时间格式问题
2009/01/13 PHP
php auth_http类库进行身份效验
2009/03/19 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
Python中正则表达式详解
2017/05/17 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
Python列表与元组的异同详解
2019/07/02 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
中药学专业求职信
2014/05/31 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
2014年接待工作总结
2014/11/26 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
党员思想汇报材料
2014/12/19 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
Go语言怎么使用变长参数函数
2022/07/15 Golang
keepalived + nginx 实现高可用方案
2022/12/24 Servers