【问题标题】:Why Does String Interpolation Only Work In Double Quotes PHP为什么字符串插值只适用于双引号 PHP
【发布时间】:2018-03-21 21:57:41
【问题描述】:

我通过 PHP 编程注意到字符串插值 ("blah blah ${foo}") 仅适用于双引号字符串 ("...")。

例如,这条线会起作用:

$bar = "foo";
echo "I like ${bar}";

>> I like foo

但这个不会:

$bar = "foo";
echo 'I like ${bar}';

>> I like ${bar}

我知道PHP Manual 谈到了插值仅在此类字符串中起作用的事实,但它没有解释为什么选择以这种方式工作。

这就是我的问题 --- 为什么字符串插值仅适用于 PHP 中的双引号字符串?

【问题讨论】:

  • 在 PHP 中,双引号内的任何内容在输出之前都会被解析,单引号内的任何内容都会被视为字符串。
  • 更好的问题可能是谁认为反引号 (execution) 运算符是个好主意?

标签: php string string-interpolation


【解决方案1】:

显而易见的答案是,有时您可能不希望在字符串中解释变量。

以下面这行代码为例:

$currency = "$USD";

这会产生“未定义变量”通知,$currency 是一个空字符串。绝对不是你想要的。

可以逃脱它("\$USD"),但是,嘿,那是个废话。

因此,作为设计决策,PHP 选择插入双引号字符串而不插入单引号字符串。

【讨论】:

  • 增加了不需要解析“单引号字符串”的好处。这是默认他们的一个很好的理由。性能。
  • @ficuscr Not really...
  • 因为不是一个好的默认值或性能真的没有实际意义?啊,阅读链接。
  • @ficuscr 因为性能差异最多可以忽略不计,当它存在时。
  • 好书。感谢分享。虽然我同意,但在我看来,这仍然归结为适合工作的正确工具。当字符串函数可以使用时不要使用 preg (确定不是一个很好的比较)。也许对我来说症结在于代码的可读性。同样的原因我更喜欢“Hello {$world}”。
【解决方案2】:

按照定义,它就是这样工作的。这就是它的工作方式。除了 PHP 开发人员选择实现该功能的方式之外,没有“为什么”。

【讨论】:

  • 为什么要浪费你或其他人的时间?
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2011-03-27
相关资源
最近更新 更多