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 的用途有限,並且對於使用其他相似語法的程式語言的開發者來說,兩者行為完全不同,因此會感到困惑。
var_dump("{$:func()}")
PHP影片教學》
以上是PHP 8.2 不再支援字串中用${}插入變數了的詳細內容。更多資訊請關注PHP中文網其他相關文章!