当前位置: 首页 > 科技观察

PHP8.2弃用${}在字符串中插入变量语法

时间:2023-03-13 19:39:32 科技观察

PHP社区在4月底仅以一票反对通过了一项提案。提案的内容是在即将发布的PHP8.2中不再支持使用${}语法(标记为已弃用)在字符串中插入变量,并在PHP9中被删除。目前PHP可以在字符串中插入变量双引号(")和heredocs直接插入变量:"$foo"在变量两边加上花括号:"{$foo}"在$符号后面加上花括号:"${foo}"定义了一个variablevariablesyntax("${expr}",等同于(string)${expr}提交提案的开发者IlijaTovilo认为第一种和第二种方法各有优缺点。第3种而4th的写法容易混淆,而且4有完全不同的语义(可变变量),很少用这种方式在字符串中插入变量,所以IlijaTovilo提交的RFC正是上述3和4中的提案语法在PHP8.2中已弃用,将被移除在PHP9.0中提供。var_dump("${foo}");//弃用:不推荐在字符串中使用${}var_dump("${(foo)}");//弃用:不推荐在字符串中使用${}(可变变量)关于这个提案的影响,IlijaTovilo分析了Packagegist上的Top1000存储库,得出的结论是上面3个的语法被弃用了267次使用,4个只有0次。分析源码:https://gist.github.com/iluuu1994/05427dd74100af8e41ebff3d4201742cIlijaTovilo认为很多其他编程语言也使用${foo}语法在字符串中插入变量,例如bash和JavaScript(在Templateliterals模板文字)。但它们的行为与在PHP中不同。在PHP中,此语法意味着定义可变变量。在JavaScript中,它支持任意表达式。在PHP的当前形式中,上面的选项3和4的用途有限,并且会使具有类似语法的其他编程语言的开发人员感到困惑,因为它们的行为完全不同。未来IlijaTovilo希望支持这样的语法:var_dump("{$:func()}")他认为如果决定这样做,那么有必要首先删除不太有用的选项以避免进一步的混淆。这就是IlijaTovilo希望通过提交这个RFC来达到的目的。本文转自OSCHINA本文标题:PHP8.2deprecatesthesyntaxofinsertingvariablesinstringsthrough${}