I was wondering why I can’t do something like {number_format($row['my_number'])} inside a Heredoc. Is there any way around this without having to resort to defining a variable like $myNumber below?
Looked at http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc but found nothing.
CODE
foreach ($dbh -> query($sql) as $row):
$myNumber = number_format($row['my_number']);
$table .= <<<EOT
<tr>
<td>{$row['my_number']}</td> // WORKS
<td>$myNumber</td> // WORKS
<td>{number_format($row['my_number'])}</td> // DOES NOT WORK!
</tr>
EOT;
endforeach;
You can execute functions in a HEREDOC string by using
{$variable expressions. You however need to define a variable for the function name beforehand:So this kind of defeats the HEREDOCs purpose of terseness.
For readability it might be even more helpful to define a generic/void function name like
$expr = "htmlentities";for this purpose. Then you can utilize almost any complex expression and all global functions in heredoc or doublequotes:And I think
{$expr(is just more obvious to anyone who comes across such a construct. (Otherwise it’s just an odd workaround.)