深入解析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 相关文章推荐
一个ubbcode的函数,速度很快.
Oct 09 PHP
php分页思路以及在ZF中的使用
May 30 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
php实现转换ubb代码的方法
Jun 18 PHP
详细解读PHP中接口的应用
Aug 12 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
PHP中的异常处理机制深入讲解
Nov 10 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入门学习的几个不错的实例代码
2008/07/13 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
PHP在线书签系统分享
2016/01/04 PHP
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
Python程序语言快速上手教程
2012/07/18 Python
Python3基础之基本运算符概述
2014/08/13 Python
Python性能优化技巧
2015/03/09 Python
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python面向对象特殊成员
2017/04/24 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
个人自荐书
2013/12/20 职场文书
费用会计岗位职责
2014/01/01 职场文书
水果连锁超市创业计划书
2014/01/24 职场文书
主管会计岗位责任制
2014/02/10 职场文书
思想品德课教学反思
2016/02/24 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
Python实现8种常用抽样方法
2021/06/27 Python