Top

PHPの関数でHTMLを出力する方法

特に難しい技術ではないのですが、こんな事も出来たんだと言う事をついこの前知ったので記事に書いてみます。

恐らく PHP の関数で HTML を出力したいときは普通、以下のような感じで書くと思います。

<?php
function make_html() {
  echo '<div>書き込みたい要素</div>';
}

//関数の実行
make_html();
?>

この記事ではこれとは違った方法で出力してみます。

PHP で HTML を出力

以下のコードでも、上記のコードと同じ結果を得ることが出来ます。

<?php
function make_html() {
?>
  <div>書き込みたい要素</div>
<?php
}

//関数の実行
make_html();
?>

中括弧、ブラケットの始まりと終わりで PHP のエリアを一度切って、普通の HTML を書けばその部分が普通に出力されます。

初めて知った時すごく驚いたんですが、これってよく使われる書き方なんでしょうか。

中括弧で PHP のエリアを一度切って普通の HTML を出力するのは if とか for ではわりかし色んな所で見る気がします。

<?php
//if の場合
if(true) {
?>
  <span>本当</span>
<?php
} else {
?>
  <span>嘘</span>
<?php
}
?>


<?php
//for の場合
for($i = 0; $i < 10; $i++) {
?>
  <li>リスト要素</li>
<?php
}
?>

これが function、関数でも普通に出来てしまうということですね。

echo とコーテーションが続くとわかりづらくなったりしますが、一度切ってしまえばそのまま書くだけでいいので、利用範囲は多い気がします。

<?php
function make_html() {
  echo '<ul>';
  echo '<li>リスト1</li>';
  echo '<li>リスト2</li>';
  echo '<li>リスト3</li>';
  echo '<li>リスト4</li>';
  echo '<li>リスト5</li>';
  echo '<li>リスト6</li>';
  echo '</ul>';
}
?>

よりも

<?php
function make_html() {
?>
<ul>
  <li>リスト1</li>
  <li>リスト1</li>
  <li>リスト1</li>
  <li>リスト1</li>
  <li>リスト1</li>
  <li>リスト1</li>
</ul>
<?php
}
?>

の方が見やすいです。多分。

まとめ

if や for では endif、endfor を使って PHP を一度切って書く方法が使えますが、関数の場合は endfunction のようなものはありません。ですので、HTML をべた書きしたい場合はこの書き方が便利です。

閉じ中括弧 } が目立たないので書き忘れたりまちがって消したりしがちですが、echo をひたすら連発するよりは見やすい書き方な気がします。

時と場合によって使い分けられるのが一覧便利そうです。