在 PHP 中的 heredoc 中使用变量

2022-08-30 10:52:43

我是PHP / SQL的新手,我正在尝试在heredoc中使用变量,因为我需要输出大量文本。我只包括了第一句话,因为它足以显示问题)。

我的问题是,在heredoc中,变量(见下文:和)不被识别为变量,而是被识别为纯文本。我该如何解决这个问题?$data['game_name]$data['game_owner']

$response = $bdd->query('SELECT * FROM video_game');
while ($data = $response->fetch())
{

    echo <<<'EX'
    <p>Game: $data['game_name']<br/>
    the owner of the game is $data['game_owner']
    </p>
    EX;
}

答案 1

你的heredoc需要一点修改(因为它实际上是Nowdoc!

    echo <<<EX
    <p>Game: {$data['game_name']}<br/>
    the owner of the game is {$data['game_owner']}
    </p>
    EX;
  • Heredoc 标识符(与 nowdoc 标识符不同)不能被引用。 需要成为.'EX'EX

    你把Nowdoc和heredoc混淆了。

  • 字符串中的复杂数据类型必须被包围,才能将它们解析为变量。例如,应为 。{}$data['game_name']{$data['game_name']}

  • 在过时的 PHP 版本(PHP 7.3 之前)中,heredoc 终止符不得有任何前面的空格。从文档中:

    结束标识符可以按空格或制表符缩进,在这种情况下,缩进将从文档字符串中的所有行中剥离。在 PHP 7.3.0 之前,结束标识符必须从该行的第一列开始。

你在这里把heredoc和nowdoc混为一谈。你想使用heredoc而不是Nowdoc,因为你的字符串中有变量。Heredocs是“扩展的”双引号字符串,而nowdocs更类似于单个引号字符串,因为变量不是在nowdoc字符串中解析的,而是在heredoc中解析的。

请更仔细地阅读有关这些内容的文档。


答案 2

推荐