PHP 7.0无f-string语法,依赖双引号插值、sprintf、str_replace等实现字符串格式化;需注意Unicode空格处理及表达式花括号包裹规则。

PHP 7.0 本身不提供新的字符串格式化语法(如 Python 的 f-string 或 C# 的插值),但它的字符串处理能力在原有基础上更稳定、更可控,尤其结合类型声明和函数设计后,能写出更清晰、不易出错的格式化逻辑。关键在于用对方法、避开陷阱、明确意图。
基础拼接与插值(双引号+变量)
最常用也最直接的方式:用双引号包裹字符串,在其中嵌入变量或简单表达式(PHP 会自动解析):
-
"Hello, $name! You have $count messages."—— 变量名直接写,无需花括号(单个变量时) -
"Price: \${$price:.2f}"不生效 —— PHP 不支持这种 C 风格格式符;必须用函数处理 - 复杂表达式需用花括号:
"Total: {$order->getAmount() * 1.1} USD"
sprintf 与 printf:精准控制格式
需要数字对齐、小数位数、进制转换等场景,sprintf() 是首选(返回字符串),printf() 直接输出:
-
sprintf('User ID: %06d', 42)→"User ID: 000042"(6位补零) -
sprintf('%.2f%%', 95.7)→"95.70%"(保留两位小数+百分号) -
sprintf('0x%02X', 255)→"0xFF"(大写十六进制)
str_replace / preg_replace:面向内容的动态替换
适合模板化字符串(如邮件正文、日志模板),把占位符替换成真实值:
立即学习“PHP免费学习笔记(深入)”;
$template = 'Dear {name}, your order #{id} is ready.';str_replace(['{name}', '{id}'], [$user->name, $order->id], $template)- 比拼接更易维护,也避免变量作用域问题
注意 Unicode 空格等隐形字符干扰
从 HTML 或富文本提取字符串后,常混入 \u{00a0}(不间断空格),它看起来像空格但 trim() 默认不清理:
-
str_replace("\xc2\xa0", ' ', $text)—— UTF-8 编码下正确移除 NBSP -
preg_replace('/\s+/u', ' ', $text)可统一空白符,再trim() - 别用
$text != "\u00a0",PHP 7.0 中双引号里\u不解析为 Unicode 字符



















