深入解析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将数据导入到Foxmail
Oct 09 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
thinkPHP中_initialize方法实例分析
Dec 05 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
Laravel ORM 数据model操作教程
Oct 21 PHP
PHP 8新特性简介
Aug 18 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中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
javascript中new关键字详解
2015/12/14 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
python中使用%与.format格式化文本方法解析
2017/12/27 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
优秀学生自我鉴定范例
2013/12/18 职场文书
校友会欢迎辞
2014/01/13 职场文书
带薪年假请假条
2014/02/04 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书