深入解析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下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
三种php连接access数据库方法
Nov 11 PHP
thinkphp实现数组分页示例
Apr 13 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
PHPstorm快捷键(分享)
Jul 17 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
原生js实现无缝轮播图
2020/01/11 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
python中返回矩阵的行列方法
2018/04/04 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
python3 flask实现文件上传功能
2020/03/20 Python
python使用matplotlib画饼状图
2018/09/25 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
行政文员岗位职责
2013/11/08 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
党员作风建设整改方案
2014/10/27 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers