PHP/HTML出力部分を関数化する

PHP/HTML出力部分を関数化する

複雑なHTML出力を持つレガシーコードを操作する場合にそこで使っている変数の由来を確かめつつ、自分の使う変数が外部に影響を与えないようにする必要がでてきて大変になる。 こういう場合に HTML 出力部分に関数スコープを導入できないかというやり方。

PHPのスコープは主に3つで

  • スーパーグローバル
  • グローバル
  • 関数

通常のべた書き HTML 出力

グローバルにぶちまけてあるスコープの変数をそのまま出す。

<?php $hoge = 123; ?>
<html>
    <head>
        <title>hogehoge</title>
    </head>
    <body>
        <?= $hoge ?>
    </body>
</html>

関数でのラッピング

HTMLの出力部分を関数を利用して全体をラップしてしまう。 ラップするだけなので既存のコードに与える影響は軽微である。

<?php function show_hogehoge(){ ?>
<?php $hoge = 123; ?>
<html>
    <head>
        <title>hogehoge</title>
    </head>
    <body>
        <?= $hoge ?>
    </body>
</html>
<?php } ?>
<?php show_hogehoge(); ?>

変数 $hoge が関数スコープに閉じ込められた。

当然外部からパラメータも取ることができる

<?php function show_hogehoge($piyo){ ?>
<?php $hoge = 123; ?>
<html>
    <head>
        <title>hogehoge</title>
    </head>
    <body>
        <?= $hoge ?>
        <?= $piyo ?>
    </body>
</html>
<?php } ?>
<?php show_hogehoge($piyo); ?>

HTML 出力に必要な変数のみを整理することができる。

ヘルパー関数を作る

HTML 加工用のヘルパー関数を作る。こいつも関数スコープに閉じ込めれば、外部へ影響は出ない。

<?php function show_hogehoge($piyo){ ?>
<?php $hoge = 123; ?>
<?php $fuga = function(){ echo "fuga"; }; ?>
<html>
    <head>
        <title>hogehoge</title>
    </head>
    <body>
        <?= $hoge ?>
        <?= $piyo ?>
        <?php $fuga(); ?>
    </body>
</html>
<?php } ?>
<?php show_hogehoge($piyo); ?>
php/functionize_html_part.txt · 最終更新: 2017-06-19 10:39 by ore