【问题标题】:Why doesn't PHP support curly-brace expansion of consts in a string?为什么 PHP 不支持字符串中 const 的花括号扩展?
【发布时间】:2011-05-02 11:47:35
【问题描述】:

PHP 支持这个:

$z = 5;
$str = "z is $z";  // result: "z is 5"

它支持这一点:

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

但它不支持这个:

class abc
{
   const n = 2;
}
$str = "x is {abc::n}";  // result: "x is {abc::n}"

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

【问题讨论】:

  • PHP 分词器在双引号中查找 $。变量是字符串中的主要插值目标,而不是表达式。 { 只是变量周围的语法糖,但实际上不应该在字符串中开始复杂的解释。有时会巧妙地滥用它来做到这一点,但它实际上只适用于变量。这就是不支持 {constants} 的原因。

标签: php constants curly-braces


【解决方案1】:

curly 语法是扩展的 variable 语法。它用于将变量插入到字符串中。就像在 PHP 中以 $ 开头的变量一样,其他所有内容都会产生语法错误。

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

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

echo "Something {$_(Class::Constant)}";

但这是一个通常不合适的 hack。请改为使用字符串连接:

echo 'Something ' . Class::Constant;

【讨论】:

  • 真的很好!我会在 php 5.3 上考虑这个
  • 更好的是:$_ = "htmlspecialchars"; 更通用。
猜你喜欢
  • 2017-08-08
  • 2022-10-22
  • 1970-01-01
  • 2011-07-17
  • 2012-09-20
  • 2023-01-29
  • 2016-06-20
  • 1970-01-01
相关资源
最近更新 更多