深入解析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
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
PHP 面向对象 final类与final方法
May 05 PHP
php判断字符串在另一个字符串位置的方法
Feb 27 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
php使用get_class_methods()函数获取分类的方法
Jul 20 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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脚本的10个技巧(4)
2006/10/09 PHP
PHP编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
Python中操作MySQL入门实例
2015/02/08 Python
Python中设置变量访问权限的方法
2015/04/27 Python
python算法表示概念扫盲教程
2017/04/13 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
同学会感言
2015/07/30 职场文书
Python如何加载模型并查看网络
2022/07/15 Python