php编程中echo用逗号和用点号连接的区别


Posted in PHP onMarch 26, 2016

里面提到了echo 字符串用,比用.连接要好。原因先不说,先来看以下两句

<?php
 // 逗号比.更节省时间?
 echo '1+5=' . 1+5; 
 echo '1+5=' . 5+1;

结果是什么?

1+5=6?
1+5=6?
——————
6?
2?
——————
6.6?
6.6?
——————

我只能说echo '5+1=' . 1+5;的结果是10,所以结果是6和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 echo manual

<?php
// Strings can either be passed individually as multiple arguments or
// concatenated together and passed as a single argument
echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', chr(10);
echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . "\n";

至于为啥快,可以简单理解,用.是先拼接在echo,虽然逗号个数代表echo的调用次数(可以这么理解暂时)。
但是拼接的速度要小于echo的速度。
如果深入理解,VLD如下图。是@tywei大神的图

php编程中echo用逗号和用点号连接的区别

上面比下面多了个CONCAT,下面比上面多了个echo。

PHP 相关文章推荐
用PHP编程开发“虚拟域名”系统
Oct 09 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
Oct 20 PHP
php生成数字字母的验证码图片
Jul 14 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
项目中应用Redis+Php的场景
May 22 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 #PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 #PHP
php用正则判断是否为数字的方法
Mar 25 #PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 #PHP
PHP程序员的技术成长规划
Mar 25 #PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 #PHP
PHP 生成微信红包代码简单
Mar 25 #PHP
You might like
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
php实现等比例压缩图片
2018/07/26 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
jquery CSS选择器笔记
2010/03/29 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
Python中lru_cache的使用和实现详解
2021/01/25 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
给老婆的检讨书
2015/01/27 职场文书
个人承诺书格式范文
2015/04/29 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android
Python OpenCV实现图形检测示例详解
2022/04/08 Python