深入解析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 相关文章推荐
PHP 开发工具
Dec 06 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
php 数组的指针操作实现代码
Feb 08 PHP
深入密码加salt原理的分析
Jun 06 PHP
PHP多例模式介绍
Jun 24 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
PHP文件缓存类示例分享
Jan 30 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php获取网页上所有链接的方法
Apr 03 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 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
基于文本的搜索
2006/10/09 PHP
聊天室php&mysql(三)
2006/10/09 PHP
一个用php实现的获取URL信息的类
2007/01/02 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
Python全局变量操作详解
2015/04/14 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
电大物流学生的自我评价
2013/10/25 职场文书
函授药学自我鉴定
2014/02/07 职场文书
社区工作感言
2014/02/21 职场文书
母亲节感恩寄语
2014/02/21 职场文书
《火烧云》教学反思
2014/04/12 职场文书
任命书模板
2014/06/04 职场文书
企业授权委托书范本
2014/09/22 职场文书
办护照工作证明
2014/10/01 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers