PHP 8.2 ${var} 字符串插入变量解析语法弃用

前言

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 版本中都能兼容。

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
滚动至顶部