代码如下:
- 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 会对每个参数先进行计算. 最后再进行连接后输出. 所以我们用逗号就不存在上面的问题了
来源: https://www.php1.cn/detail/php-52360c4436.html