開発畑トップ   »  PHP   »  今日からプログラマー!PHP入門【テンプレートエンジン作成編】   »  今日からプログラマー!PHP入門(第2回)

今日からプログラマー!PHP入門(第2回)

さぁ始めましょう。今日からプログラマー!PHP入門、略して今プロPHP第2回です
前回はボリューム的に少なかったので、今回はちょっと多めにしました。
頑張って覚えていきましょう。

今回は文字列の置換やユーザー関数などを勉強します。


テンプレートに文字をいれてみよう

では、まず前回作ったテンプレートエンジン(になる予定のファイル)を改良していきましょう

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Kyo Pro PHP</title>
</head>
<body>
<p>{message}</p>
</body>
</html>

前回のHTMLから、Pタグの中の文章を{message}という文字に変えました。
今回はこの{message}にメッセージが入るようにしてみましょう。

ではPHP側の処理でこの文字を『Kyou Kara Programer! PHP Nyumon.』に変えます。
以下が、そのPHP側のプログラムです。

<?php
$file = "template.html";
$data = file_get_contents($file);

$message='Kyou Kara Programer! PHP Nyumon.';
$data = preg_replace('/{message}/', $message, $data);

echo $data;
?>

前回のPHPから2行追加(4行目と5行目)しました。
では、処理を確認してみましょう。

  • 2行目
    前回同様HTMLファイル名を$fileに代入します。
  • 3行目
    $file(HTMLファイル名が入っている)を読み込んで$dataに代入します。
  • 4行目
    HTMLに表示する文字列「Kyou Kara Programer! PHP Nyumon.」を$messageに代入します。
  • 5行目
    preg_replace()関数を使って、$data(HTMLファイルの中身が入っている)の中の{message}という文字列を探して$message(Kyou Kara Programer! PHP Nyumon.の文字列が入っている)に置換します。
    preg_replace()関数についてはリンク先をご参照くださいませ。
  • 6行目
    $dataを出力します。

ここで新しく、置換処理であるpreg_replace()関数が登場しました。
この関数は正規表現を使って、文字列を置換することができます。

HTMLファイル、PHPファイル共に書けたら実行してみましょう。
「Kyou Kara Programer! PHP Nyumon.」の文字が表示されたらオッケーです。

さぁ、次に行きましょう。

ユーザー定義関数で処理をまとめよう

次のHTMLファイルを見てください。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Kyo Pro PHP</title>
</head>
<body>
<h1>{header}</h1>
<p>{message}</p>
</body>
</html>

{header}という文字が増えました。
では、この文字も置換してみましょう。

<?php
$file = "template.html";
$data = file_get_contents($file);

$target['header'] = 'kyou pro php!';
$target['message'] = 'Kyou Kara Programer! PHP Nyumon.';
$data = data_replace($target, $data);
echo $data;
exit;
function data_replace($target, $data) {
  foreach ($target as $pattarn => $replacement) {
    $data= preg_replace('/{' . $pattarn . '}/', $replacement, $data);
  }
  return $data;
}
?>

いきなり難しくなった?いえいえ、順を追ってみていけば大丈夫(な、はず)です。

  • 3行目までは、同じ処理なので省略
  • 4行目、5行目
    $target変数の後ろに括弧[]が付いていますね。これは配列と言います。
    詳細はリンクを見てもらうとして、ここでは1つの変数に複数の値(数値や文字列など)を入れることができると覚えておけばオッケーです。
    このプログラムでは$target変数の中にheaderというキーで「kyou pro php!」という文字列と、messageというキーで「Kyou Kara Programer! PHP Nyumon.」という文字列が入っていることになります。
  • 6行目
    data_replace()関数に先ほどの$target変数と$data変数を渡しています。
    でも、data_replace()関数はPHPマニュアルにありません。オリジナルの関数です。
    これをユーザー定義関数と言います。
    今回のように、処理をひとまとめにしたい場合や、何度も同じ処理をしたい場合に作ると便利です。
  • 7行目
    6行目のユーザー定義関数data_replace()で色々処理をしてもらった$data変数を出力します。
  • 8行目
    exit()関数は、現在のスクリプトを終了します。なので、この行で処理は終了です。
  • 9行目
    では、そのユーザー定義関数の中身です。
    ユーザー定義関数についてはリンクを参照してもらうとして、中身の説明にいきましょう
  • 10行目
    ここでも新しい処理foreachです。
    この処理は反復処理(ループ処理)をする便利な機能です。
    ここでは受け取った$target変数を繰返し処理します
    $target変数は4行目5行目で配列になっていますので、「header」と「message」の2つのデータが入っています。
    なので、foreachでは、「header」と「message」の2回ループ処理を行います。
    「$target as $pattarn => $replacement」の部分はforeachのリンク先を見てください。$pattarnに「header」と「message」が入って、$replacementに「kyou pro php!」と「Kyou Kara Programer! PHP Nyumon.」は入るということが理解できると思います。
  • 11行目
    では、foreach文の中に入ります。
    この行はforeachで繰り返されますので、今回は2回処理されることになります。
    中身は、先述の関数preg_replace()なので、説明は端折りますね。
    ただ、ちょっとだけ違う点があるのに気付きましたでしょうか。
    preg_replace()関数の第1パラメータの部分が「'/{' . $pattarn . '}/'」になっています。
    $pattarn変数は先ほどの説明で$target変数のキーが入ることが分かっていますので、その前後の 「.(ドット)」についての説明です。
    これは文字列演算子と言います。
    説明はリンク先をどうぞwこれで文字と文字をつなげます。
    なので、foreachの1回目では「'/{header}/'」、2回目では「'/{message}/'」になります。
    これで$data変数の中身を繰返し置換するわけです。
  • 12行目
    foreach文を閉じています。今回は2回ループ処理が終わったら次の行に進みます。
  • 13行目
    return文はその関数内での処理を終了して、引数を関数の呼び出し元に値として返します。
    今回はforeach文で置換した$data変数を返します。

では、実行してみてください。うまく表示されましたでしょうか。
今回はちょっとボリュームを増やしてみましたので、覚えることが多いと思いますが、頑張って進めていきましょう。

次回はクラスについて勉強してみたいと思います。
余裕があれば予習してみてくださいませ~

コメントをどうぞ!