Formatting an array value inside a Heredoc

不问归期 提交于 2019-12-09 07:59:10

问题


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;

回答1:


You can execute functions in a HEREDOC string by using {$ variable expressions. You however need to define a variable for the function name beforehand:

$number_format = "number_format";

$table .= <<<EOT
      <tr>
      <td>{$row['my_number']}</td> // WORKS
      <td>$myNumber</td> // WORKS
      <td>{$number_format($row['my_number'])}</td> // DOES NOT WORK!
      </tr>

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:

    "   <td>  {$expr(number_format($num + 7) . ':')}  </td>  "

And I think {$expr( is just more obvious to anyone who comes across such a construct. (Otherwise it's just an odd workaround.)



来源:https://stackoverflow.com/questions/8280360/formatting-an-array-value-inside-a-heredoc

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!