深入解析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.ini中文版
Oct 09 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
php制作简单模版引擎
Apr 07 PHP
非常实用的php验证码类
May 15 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 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 字符串替换的方法
2012/01/10 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
Vue瀑布流插件的使用示例
2018/09/19 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
python实现弹跳小球
2019/05/13 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
医学专业毕业生个人求职信
2013/12/25 职场文书
美容师的职业规划书
2013/12/27 职场文书
工地门卫岗位职责
2013/12/30 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
殡葬服务心得体会
2014/09/11 职场文书
司机工作自我鉴定
2014/09/19 职场文书
企业百日安全活动总结
2015/05/07 职场文书
SQL Server中锁的用法
2022/05/20 SQL Server