我正在使用heredoc创建一个php文件,需要在生成的文件中使用heredoc,因为该文件将创建其他文件。
<<<EOD
位工作正常,我可以看到所有变量都已正确转义。
我遇到的问题是嵌套的heredoc <<<EOL
\$languageStrings
未被转义
如果我使用\$languageStrings
并运行生成的文件ddd.php,则输出为:
<?php
= Array (
'LBL_LOCATION_INFORMATION' => 'Basic Information',
'LBL_CUSTOM_INFORMATION' => 'Custom Information',
'SINGLE_' => ''
);
如果我使用\\$languageStrings
试图用esacpe得到反斜杠:
<?php
\ = Array (
'LBL_LOCATION_INFORMATION' => 'Basic Information',
'LBL_CUSTOM_INFORMATION' => 'Custom Information',
'SINGLE_' => ''
);
我如何更正此问题,以便获得$languageStrings = Array (
?我确实考虑过尝试打开文件并插入特定行,但文件总是不同。
我愿意接受建议
这是我的heredoc的一个例子
$text = <<<EOD
This is some text
This is some more text
This is a \$variable //outputs this is a $variable
This is some more text
EOD;
$text .= <<<EOD
\n
\$targetpath = 'modules/' . \$moduleInstance->name;
if (!is_file(\$targetpath)) {
mkdir(\$targetpath);
mkdir(\$targetpath . '/language');
// create the language file
\$languagepath = 'languages/en_us';
\$languageContents = <<<EOL
<?php
\$languageStrings = Array (
'LBL_LOCATION_INFORMATION' => 'Basic Information',
'LBL_CUSTOM_INFORMATION' => 'Custom Information',
'SINGLE_\$moduleInstance->name' => '\$moduleInstance->name'
);
EOL;
file_put_contents(\$languagepath . '/' . \$module->name . '.php', \$languageContents);
}
EOD;
file_put_contents('ddd.php', $text);
答案 0 :(得分:0)
我通过在heredoc
之外创建变量来修复它$strings = '\$languageStrings';
并将\$languageStrings
替换为heredoc字符串中的$strings = Array (
输出是我的预期
答案 1 :(得分:0)
需要单引号,例如 Heredoc 。该名称为 Nowdoc 。 现在,文档将单引号括起来,而文档将双引号括起来。
$foo = "bar";
echo <<<STR
str $foo
STR;
echo <<<'STR'
str $foo
STR;
OR
echo "str $foo";
echo 'str $foo';
预期结果: -> STR栏 -> str $ foo
自PHP 5.3.0起,开头的Heredoc标识符可以选择为双引号
<<<"FOO"
FOO;
与
相同<<<FOO
FOO;
尽管可选项,我还是喜欢每次都在heredoc中用双引号表示,以使其易于理解。
医生说:php.net
Nowdocs将单引号字符串用作heredocs的字符串 双引号字符串。 nowdoc的指定方式与Heredoc类似, 但是在nowdoc内部不进行任何解析。该结构非常适合 嵌入PHP代码或其他大块文本,而无需 转义。它具有与SGML构造相同的一些功能,因为它声明了一个文本块,该文本块不用于 解析。
按与此处文档相同的<<<序列来标识nowdoc, 但是后面的标识符用单引号引起来,例如 <<<'EOT'。 Heredoc标识符的所有规则也适用于nowdoc 标识符,尤其是有关收盘外观的标识符 标识符。