深入解析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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
php动态生成JavaScript代码
Mar 09 PHP
php array_map()数组函数使用说明
Jul 12 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 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实现多进程并行执行脚本
2013/06/18 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
python如何基于redis实现ip代理池
2020/01/17 Python
Python bytes string相互转换过程解析
2020/03/05 Python
毕业自我评价范文
2013/11/17 职场文书
优秀毕业生事迹材料
2014/02/12 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
防灾减灾活动总结
2014/08/30 职场文书
债务纠纷代理词
2015/05/25 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js