前言
PHP 支持在双引号和 heredoc 语法的字符串中替换变量值:
$name = 'PHP';
echo "Hello $name"; // Hello PHP
也可以在变量名中使用花括号使之显示更为直观:
$name = 'PHP';
echo "Hello {$name}"; // Hello PHP
虽然上面的两种模式最为重要,PHP 还支持其他两种模式,不过 PHP 8.2 中将会被弃用:
花括号之外的 dollar 符 ($)
PHP 8.2 开始,在花括号外使用 dollar 符 ($) 可能会出现弃用通知:
echo "Hello ${name}";
会出现以下提示:
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in ... on line ...
为了避免出现弃用通知,可以将花括号外面的 $ 符号移到花括号内。这一方式可以横跨 PHP 版本,且不会导致弃用通知。
echo "Hello ${name}"; //PHP8.2弃用
echo "Hello {$name}"; //PHP8.2使用
可变变量或表达式
可变变量是指变量名也是表达式的返回值或者另一个变量的值。PHP 已经对限制了对字符串字面量可变变量的支持。
PHP 8.2 起,当表达式内的花括号用来解析可变变量或表达式时,将 $
放在花括号外会出现弃用通知。
下面的代码在字符串字面量中使用可变变量:
$name = 'PHP';
$var = 'name';
echo "Hello $$var";
echo "Hello {$$var}";
上面的示例都不会被弃用,不过在花括号外使用 $
在 PHP 8.2 会被弃用。比如,下面代码会出现弃用通知:
$name = 'PHP';
$var = 'name';
echo "Hello ${$var}";
Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in ... on line ...
要避免弃用通知,将在花括号外的 $
移动到花括号内:
echo "Hello ${$var}"; //PHP8.2弃用
echo "Hello {$$var}"; //PHP8.2使用
PHP 也支持在字符串字面量中使用表达式,用来解析变量名:
echo "Hello $$object->getMethod()"
类似于可变变量出现弃用通知的例子,在花括号外使用 $
符也会产生弃用通知:
Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in ... on line ...
在表达式外再另外加上一个花括号可以避免弃用通知:
echo "Hello ${$object->getMethod()}" //PHP8.2弃用
echo "Hello {${$object->getMethod()}}" //PHP8.2使用
最后
PHP 8.2 弃用了一些使用字面量的模式,可以将 $
用放在花括号里面。此外,解析变量名的表达式必须将花括号放在表达式外边。
上述的例子在所有的 PHP 版本中都能兼容。