PHP 8.2 弃用通过 ${} 在字符串插入变量语法

开发
PHP 社区 4 月底通过了一项只有一张反对票的提案,提案内容是在即将发布的 PHP 8.2 中,不再支持使用 ${} 在字符串中插入变量的语法(标记为弃用状态)。

PHP 社区 4 月底通过了一项只有一张反对票的提案,提案内容是在即将发布的 PHP 8.2 中,不再支持使用 ${} 在字符串中插入变量的语法(标记为弃用状态),并在 PHP 9 删除该语法。

目前 PHP 可通过以下方式在带有双引号 (") 和 heredoc 的字符串中插入变量。

  • 直接插入变量: “$foo”
  • 在变量外添加花括号: “{$foo}”
  • 在 $ 符号后面添加花括号: “${foo}”
  • 定义可变的变量语法 ( “${expr}”,等同于 (string) ${expr}

提交该提案的开发者 Ilija Tovilo 认为,第 1 和第 2 种方式各有利弊。第 3 和第 4 种写法则很容易混淆,并且 4 具有完全不同的语义 (variable variables),极少使用这种方式在字符串中插入变量。

因此,Ilija Tovilo 提交的 RFC 正是建议在 PHP 8.2 中弃用上述 3 和 4 的语法,并在 PHP 9.0 中将其删除。

var_dump("${foo}");
// Deprecated: Using ${} in strings is deprecated

var_dump("${(foo)}");
// Deprecated: Using ${} (variable variables) in strings is deprecated

对于此提案的影响,Ilija Tovilo 通过对 Packagegist 上的 Top 1000 仓库进行分析得出:上述 3 的语法有 267 次被使用,4 只有 0 次。分析源码:https://gist.github.com/iluuu1994/05427dd74100af8e41ebff3d4201742c

Ilija Tovilo 认为,许多其他编程语言也使用 ${foo} 语法在字符串中插入变量,例如 bash 和 JavaScript(在模板字面量 Template Literals 中)。但它们的行为与在 PHP 中的不同。在 PHP 中,这种语法意味着定义可变的变量。在 JavaScript 中,它支持任意表达式。在 PHP 目前的形式中,上述选项 3 和 4 的用途有限,并且对于使用其他相似语法的编程语言的开发者来说,两者行为完全不同,因此会感到困惑。

未来 Ilija Tovilo 希望支持如下语法:

var_dump("{$:func()}")

他认为,如果决定这样做,那么有必要先删除不太有用的选项,以避免进一步增加混乱。这就是 Ilija Tovilo 提交此 RFC 希望实现的目标。

本文转自OSCHINA

本文标题:PHP 8.2 弃用通过 ${} 在字符串插入变量语法

本文地址:https://www.oschina.net/news/195055/deprecate-dollar-brace-string-interpolation

责任编辑:未丽燕 来源: 开源中国
相关推荐

2009-11-24 19:33:07

PHP字符串中加入变量

2009-11-25 09:13:41

PHP数组转字符串PHP字符串转数组

2009-11-24 09:55:44

PHP字符串函数

2009-12-11 13:16:04

PHP查询字符串

2009-08-07 15:58:54

C#字符串插入html

2009-11-30 14:08:42

PHP字符串原理

2009-11-27 10:24:25

PHP字符串操作

2009-12-01 10:38:08

PHP字符串函数

2009-11-18 12:38:04

PHP字符串函数

2009-11-30 18:26:06

PHP字符串替换

2009-11-17 10:55:02

PHP字符串处理函数

2009-11-26 13:11:24

PHP字符串

2009-12-01 09:18:50

PHP分割字符串

2009-11-18 18:02:19

PHP字符串截取

2009-11-16 17:59:13

PHP数组转字符串

2009-11-26 16:26:32

PHP字符串mbstr

2010-01-05 17:43:29

JSON字符串

2009-11-26 17:16:38

PHP函数str_re

2009-06-15 16:53:44

Groovy字符串gstring

2009-12-01 09:52:40

PHP过滤字符串
点赞
收藏

51CTO技术栈公众号