6

我正在尝试以这种方式在heredoc上使用sprintf。它不会工作。知道如何解决这个问题吗?

$i = <<<EOD
This is your invoice for %1$s %1$s %1$s %1$s
EOD;

$year = '2013';

$i = sprintf($i,$year);

echo $i;

注意:未定义变量:s in

4

2 回答 2

9

因为 HEREDOC 的行为类似于双引号字符串,PHP 试图将其$s作为变量进行插值。改用NOWDOC _

$i = <<<'EOD'
This is your invoice for %1$s %1$s %1$s %1$s
EOD;
于 2013-10-31T04:45:28.763 回答
4

或者只是逃避美元符号:

$i = <<<EOD
This is your invoice for %1\$s %1\$s %1\$s %1\$s
EOD;

这在没有 nowdoc 语法的 PHP 5.2 中很有用。

于 2014-04-01T23:29:38.857 回答