【问题标题】:How to escape variable name in PHP's Heredoc?如何在 PHP 的 Heredoc 中转义变量名?
【发布时间】:2015-01-28 00:36:39
【问题描述】:

我有一个变量$foo,其中有一些 id,我想在 PHP 的 Heredoc 字符串中使用它,如下所示:

$text = <<<TEXT
  <div id="$foo_bar"></div>
TEXT;

明显的问题是 PHP 将 Heredoc 中的变量解析为 $foo_bar,这当然不存在。我想要的是解析$foo 变量,并且“_bar”应该被视为常规文本。

是否可以使用某种转义字符或无法实现?

P.S.:是的,我知道我可以使用带引号的字符串而不是 Heredoc,但我必须使用 Heredoc(我有大量的文本和代码,其中包含引号等)。

【问题讨论】:

    标签: php string escaping heredoc


    【解决方案1】:

    使用此代码来强制使用$foo

    $text = <<<TEXT
      <div id="{$foo}_bar"></div>
    TEXT;
    

    大括号强制内容为变量。

    或者,您可以在 HEREDOC 之前附加“_bar”。

    $foo = $foo . "_bar";
    $text = <<<TEXT
      <div id="$foo"></div>
    TEXT;
    

    【讨论】:

    • 我建议你在第二个例子中使用一个新变量,而不是重复使用$foo,例如$foobar = $foo . "_bar";
    • 这可能很好,但除非您打算对$foo 有其他用途,否则没有理由,只会占用更多内存。
    【解决方案2】:

    在变量周围加上花括号,就像在带引号的字符串中一样。

    $text = <<<TEXT
      <div id="{$foo}_bar"></div>
    TEXT;
    

    【讨论】:

    • 顺便说一句,请注意您也可以在$:&lt;div id="${foo}_bar"&gt;&lt;/div&gt; 之后打开卷曲。它不是惯用的 PHP,但它与它在 shell 和 Perl 中的工作方式保持一致。
    • 我什至不认为它记录在 PHP 手册中。我想它只是为了兼容 shell/Perl,但我不推荐它。
    • @Barmar 当然is documented
    • @AlexandruGuzinschi 它显示在示例中,但文档的文本从未提及它。它只描述{$var}
    猜你喜欢
    • 2011-07-16
    • 2018-01-07
    • 2017-11-21
    • 2018-02-24
    • 2013-06-15
    • 2015-04-21
    • 2019-08-18
    • 2017-09-01
    • 2019-11-21
    相关资源
    最近更新 更多