深入解析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 相关文章推荐
建立文件交换功能的脚本(二)
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
解析php中获取系统信息的方法
Jun 25 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
PHP session会话操作技巧小结
Sep 27 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
Python中的函数作用域
2018/05/07 Python
详解Django的CSRF认证实现
2018/10/09 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Hotels.com南非:酒店预订
2017/11/02 全球购物
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
护理专业大学生自我推荐信
2014/01/25 职场文书
房产代理公证处委托书
2014/04/04 职场文书
社团活动总结
2014/04/28 职场文书
答谢会策划方案
2014/05/12 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
小石潭记导游词
2015/02/03 职场文书
学生保证书格式
2015/02/27 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers