Because HEREDOC acts like a double-quoted string, PHP is attempting to interpolate the $s
as a variable. Try NOWDOC instead
$i = <<<'EOD'
This is your invoice for %1$s %1$s %1$s %1$s
EOD;
Pergunta
I'm trying to use sprintf on a heredoc this way. It wont work. Any idea how to solve this?
$i = <<<EOD
This is your invoice for %1$s %1$s %1$s %1$s
EOD;
$year = '2013';
$i = sprintf($i,$year);
echo $i;
Notice: Undefined variable: s in
Solução
Because HEREDOC acts like a double-quoted string, PHP is attempting to interpolate the $s
as a variable. Try NOWDOC instead
$i = <<<'EOD'
This is your invoice for %1$s %1$s %1$s %1$s
EOD;
Outras dicas
Or just escape the dollar signs:
$i = <<<EOD
This is your invoice for %1\$s %1\$s %1\$s %1\$s
EOD;
This is useful e.g. in PHP 5.2 where there's no nowdoc syntax.