Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【PHP】ブロックを伴う関数のわかりやすい記法

こんにちは😊Kintarouです。

現在エンジニア転職を目指してプログラミング学習中です👨‍🎓
夢はフリーランスエンジニアになって働く人にとって働く事が楽しくなるシステムを作ること!
と、愛する妻と海外移住すること🗽

プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry


今回参考にさせて頂いたサイト様🙇‍♂️ dotinstall.com


今回はifやforeach等、ブロックを伴う関数が入れ子になった場合にわかりやすく記述する為の記法についてまとめます!

ブロックを伴う関数をネストする

ifやforeachなどのブロックを伴う関数をネストして使う場合、構造終了のタグがどの関数のものかわかりにくくなる事が多々あるかと思います。
PHPの場合わかりやすく表記する方法があるようなのでそちらをまとめてみます。

<?php
#このphpタグの中は今回の本題ではないので気にしなくて大丈夫です。

function h ($str)
{
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

$name = [
  'Kintarou',
  'Kinjirou',
  'Kinsabrou',
];

?>

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>PHP Practice</title>
</head>
<body>
  <ul>

  <!-- 本題はこちらから
    まず$names変数が空配列かどうかをif文で分岐させています。 -->

    <?php if (empty($names)) { ?>
      <li>Hello, Nobody !</li>
    <?php }else{ ?>

  <!-- 空配列でない場合、配列の要素毎に「Hello, 〜〜 !」という文を出力します。 -->

      <?php foreach ($names as $name) { ?>
        <li>Hello, <?= h($name); ?> !</li>
      <?php } ?>
    <?php } ?>

  <!-- foreachとifの構造終了タグ"}"が連続して記述されます。 -->

</ul>
</body>
</html>

○出力ページ
f:id:ryosuke-toyama:20201102160155p:plain

今回のような場合は1度のネストなのであまり気にならないかもしれませんが、これがいくつか重なってくると何の閉じタグなのかをいちいち気にする必要があります。

そこで、ブロックの記法を以下のように書き換えられます。

例)foreachの場合

foreach ( $names as $name ) {

}

foreach ( $names as $name ) :

endforeach;

これで何の閉じタグを表しているのかがすぐにわかります。
先ほどの例の場合は以下のようになります。

<?php
#このphpタグの中は今回の本題ではないので気にしなくて大丈夫です。

function h ($str)
{
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

$name = [
  'Kintarou',
  'Kinjirou',
  'Kinsabrou',
];

?>

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>PHP Practice</title>
</head>
<body>
    <ul>
    <!-- 本題はこちらから
    まず$names変数が空配列かどうかをif文で分岐させています。 -->
    <?php if (empty($names)) : ?>
      <li>Hello, Nobody !</li>
    <?php else: ?>
      
    <!-- 空配列でない場合、配列の要素毎に「Hello, 〜〜 !」という文を出力します。 -->

      <?php foreach ($names as $name) : ?>
        <li>Hello, <?= h($name); ?> !</li>
      <?php endforeach; ?>
    <?php endif; ?>

<!-- どちらの構造終了タグかが一目でわかります。 -->

</ul>
</body>
</html>

この記法は、for文(endfor;)やwhile文(endwhile;)、switch文(endswitch;)にも有効です。
ただ、do-while文には使えないので注意が必要です。

以上、どなたかの参考になれば幸いです😊