为什么PHP不支持字符串中的consts的卷括号扩展?

dlc*_*ers 4 php const curly-braces

PHP支持这个:

$z = 5;
$str = "z is $z";  // result: "z is 5"
Run Code Online (Sandbox Code Playgroud)

它支持这个:

$c = new StdClass();
$c->x = 9;
$str = "x is {$c->x}";  // result: "x is 9"
Run Code Online (Sandbox Code Playgroud)

但它不支持这个:

class abc
{
   const n = 2;
}
$str = "x is {abc::n}";  // result: "x is {abc::n}"
Run Code Online (Sandbox Code Playgroud)

为什么PHP 不支持通过大括号语法插入consts?好像应该......

Nik*_*kiC 6

卷曲语法是扩展变量语法.它用于将变量插入字符串.而在PHP变量中,$其他所有内容都会产生语法错误.

但你可以做的是调用变量函数.因此你可以这样做:

$_ = function ($expr) { return $expr; };

echo "Something {$_(Class::Constant)}";
Run Code Online (Sandbox Code Playgroud)

但这是一个通常不合适的黑客攻击.请使用字符串连接:

echo 'Something ' . Class::Constant;
Run Code Online (Sandbox Code Playgroud)

  • 更好的是:`$_ = "htmlspecialchars";` 更通用。 (2认同)