php字符串连接必须用.而非+,因+是算术运算符,会将字符串强制转为数字相加(如"hello"+"world"得0),而.和.=不触发类型转换,确保字符串拼接正确。

PHP 字符串连接用 .,不是 +,也不是其他符号。
为什么不能用 + 连接字符串
很多人从 JavaScript 或 Python 转过来,下意识写 $a + $b 拼字符串,结果要么报错,要么得到 0 或数字——因为 PHP 会把字符串当数字强制转换再相加。+ 是算术运算符,不是连接符。
-
"hello" + "world"→ 实际执行(int)"hello" + (int)"world"→0 + 0→ 结果是0 - 如果字符串开头有数字,比如
"123abc" + "45",会取前导数字部分:123 + 45 = 168 - 严格模式下(如开启
declare(strict_types=1)),虽然不会直接报错,但语义完全错误,后续逻辑极易出 bug
. 和 .= 的实际用法区别
. 是连接操作符,.= 是连接赋值操作符,类似 +=。它们不改变原变量类型,也不做隐式转换——这是和 + 最关键的差异。
-
$s = "a" . "b";→$s是字符串"ab" -
$s = "a"; $s .= "b" . "c";→ 等价于$s = $s . "b" . "c",结果是"abc" - 注意:
.=只作用于左侧变量,右侧可以是任意表达式,支持链式拼接,但别写太长,可读性会下降
字符串插值 vs . 连接:什么时候该用哪个
双引号中用 {$var} 或 $var 插值,本质是语法糖,底层仍靠连接实现。但插值有局限,. 更灵活、更可控。
立即学习“PHP免费学习笔记(深入)”;
- 简单场景(变量少、无复杂表达式):用插值更清爽,比如
"Hello, {$name}!" - 需要条件拼接、函数调用或数组索引时,插值难写或易错:比如
"id=" . $user['id'] . "&t=" . time()比"id={$user['id']}&t=" . time()更清晰,且避免Notice: Undefined index干扰输出 - 性能上差异极小,不用刻意优化;但调试时,显式
.更容易打断点、观察每段值 - 单引号里不解析变量,所以必须用
.:'prefix' . $val . 'suffix'
容易被忽略的边界情况
看似简单的 .,在类型混合、空值、编码不一致时会悄悄出问题。
-
null或false被自动转成空字符串,但true变成"1":"a" . null . false . true→"a1" - 多字节字符(如中文)本身没问题,但如果混入 GBK 编码的字符串,
.不做编码校验,拼出来可能乱码——连接前确保统一 UTF-8 - 超大字符串反复
.=(比如循环拼接几万次)会有内存和性能损耗,这时应改用array_push()+implode()
真正麻烦的不是记不住 .,而是习惯性用 + 或在插值里硬塞复杂表达式,导致错误不报在连接行,而报在下游——比如拼出来的 URL 少了个斜杠,最后卡在 cURL 报 Invalid URL 才去查。











