require構文と変数でHTMLパーツを一元化

ここからついに、PHPのプログラミングがはじまります。
PHPははじめ、『ホームページ制作を簡単にするための、便利スクリプト』として作られました。その歴史を辿っていくこととしましょう。
まずは、ホームページに共通のパーツを切り出して、外部読み込みをしてみます。

技術面の解説

はじめにPHPについて、ごく基本的なことを挙げておきます。

ファイル拡張子

PHPプログラムが書かれたファイルの拡張子は「xxxx.php」のようにする必要があります。

PHPタグ

PHPは<?php **** ?>のように、専用のPHPタグで囲む必要があります。
なお、プログラムの最後がPHPのコードで終わる場合、終了タグ「?>」はつけない方がよいです。(不要な改行コードや空白などが出力されるため、バグの原因となります)

行の閉じ方

1行の終わりには、「;(セミコロン)」を書く必要があります。
(if文などの条件分岐構文や、for文などの繰り返し構文の行には必要ありません)

変数

PHPでは、一般的なプログラミング言語のように、変数を利用できます。
変数を利用することで、文字列や数値などを格納しておき、加工したり、他の場所で出力することができます。
変数は「$xxx」のように、頭に「$」をつけた英数字で表現されます。
変数に値を入れることを、代入と表現します。

文字列を扱う

<?php
$str = "あいうえお";
$str = $str . "かきくけこ";
echo $str;

たとえば上記では、画面に「あいうえおかきくけこ」が出力されます。
(echoは、変数の中身や値を出力するための制御構文です)
下記のように書き換えることもできます。

<?php
$str = "あいうえお";
$str .= "かきくけこ";
echo $str;

(.=という書き方をすると、元の変数の値に文字列を追加します)
このように、文字列は””で囲んで扱います。

数値を扱う

<?php
$int = 10;
$int = $int + 15;
echo $int;

たとえば上記では、画面に「25」が出力されます。
下記のように書き換えることもできます。

<?php
$int = 10;
$int += 15;
echo $int;

include/require構文

PHPのinclude構文を使うと、別のファイルを読み込んで出力することができます。
HTMLファイルを読み込めば、その場に読み込んだ中身を出力します。
また、PHPのライブラリなどを読み込めば、メモリに関数やクラスを展開します。
ちなみに兄弟分の「require」という構文がありますが、こちらは、ファイルが存在しなかった場合にエラーを出力してプログラムが停止します。
セキュリティ性で考えると、『目的のファイルがなかったら停止した方がよい』ことが多いため、この講座では「require」のみを使います。

file.html
あいうえお
test.php
<?php
require "file.html";

上記では、画面に「あいうえお」が出力されます。

コメント

プログラムの中では、コメント構文を使ってメモ書きなどを行うことができます。コメント行はプログラムとして解釈されず、飛ばされて実行されます。
コメントには二種類があり、「//」を使って1行をコメントアウトする方式と、「/*」「*/」で挟んで複数行をコメントアウトする形式があります。

<?php
// これはメモ書き
echo "abc";

/* 
  これはメモ書き
*/
echo "def";

ホームページのPHP化

以前作成したブログサイト(の雛形となるHTML)をPHP化して、ローカルApache経由で表示してみます。

ディレクトリの作成

C:\xampp\htdocs\step1-040
を作成してください。

PHPファイルの作成

以下のプログラムを設置します。(以前のHTML版の拡張子を変えただけです)

step1-040-1

index.php
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>トップ | treiの日記</title>
    <link rel="stylesheet" type="text/css" href="style.css">
  </head>
  <body>
    <h1>treiの日記</h1>
    <p>
      閲覧ありがとうございます。<br>
      こちらはtreiの日記ページです。
    </p>
    <h2>メニュー</h2>
    <ul>
      <li>
        <a href="blog.php">ブログ</a>
      </li>
      <li>
        <a href="inquiry.php">お問い合わせ</a>
      </li>
    </ul>
  </body>
</html>
blog.php
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>blog | treiの日記</title>
    <link rel="stylesheet" type="text/css" href="style.css">
  </head>
  <body>
    <h1>blog</h1>
    <p>
      準備中
    </p>
    <hr>
    <a href="./">トップへ戻る</a>
  </body>
</html>
inquiry.php
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>お問い合わせ | treiの日記</title>
    <link rel="stylesheet" type="text/css" href="style.css">
  </head>
  <body>
    <h1>お問い合わせ</h1>
    <p>
      準備中
    </p>
    <hr>
    <a href="./">トップへ戻る</a>
  </body>
</html>
style.css
body{
  padding: 10px;
}
h1{
  border-bottom: 2px solid #333333;
  margin-top: 0;
  margin-bottom: 20px;
}

上記を一括ダウンロード [step1-040.zip]

Apache経由で実行

http://localhost/step1-040/
をブラウザで開くと、サイトが表示されます。
各ページ間でのリンクも動作するか確認してください。

step1-040-2

requireで共通要素の切り出し

サイトを管理する上で、サイトのヘッダやフッタ部分を共通の管理にしておきたいケースが出てきます。
そこで、ヘッダ部分とフッタ部分をそれぞれ、「header.php」「footer.php」として分離します。

修正結果

header.php
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title><?=$page_title?> | treiの日記</title>
    <link rel="stylesheet" type="text/css" href="style.css">
  </head>
  <body>
    <h1><?=$page_title?></h1>
footer.php
    <hr>
    <a href="./">トップへ戻る</a>
  </body>
</html>
index.php
<?php $page_title = "トップページ";?>
<?php require "header.php";?>
    <p>
      閲覧ありがとうございます。<br>
      こちらはtreiの日記ページです。
    </p>
    <h2>メニュー</h2>
    <ul>
      <li>
        <a href="blog.php">ブログ</a>
      </li>
      <li>
        <a href="inquiry.php">お問い合わせ</a>
      </li>
    </ul>
<?php require "footer.php";?>
blog.php
<?php $page_title = "ブログ";?>
<?php require "header.php";?>
    <p>
      準備中
    </p>
<?php require "footer.php";?>
inquiry.php
<?php $page_title = "お問い合わせ";?>
<?php require "header.php";?>
    <p>
      準備中
    </p>
<?php require "footer.php";?>

上記を一括ダウンロード [step1-040v2.zip]

これによって『共通要素を一元管理できるように』なりました。

ページタイトルの変数化

上記のソースコードの中で注目してほしいのが、

index.php
<?php $page_title = "トップページ";?>

の部分と、

header.php
<title><?=$page_title?> | treiの日記</title>
・・・・・・
<h1><?=$page_title?></h1>

の部分です。
まず、各ページの一番上でページタイトルを$page_title変数に格納し、共通パーツであるheader.phpで出力することで、ページごとに適切なタイトルを表示できるようにしています。

変数の扱いについて

せっかくなので、変数についてもう少し説明しておきます。

暗黙的な型

一般のプログラミング言語では、変数はそれぞれ型というものがあり、

  • integer型(1/2/3/100/-199/-22などの数値型)
  • float型(0.1/10.9などの浮動小数型)
  • string型(abc/あいうえおなどの文字列型)
  • array型(配列型。追って説明します)
  • object型(オブジェクト型。追って説明します)

などがあります。
PHPでも型が存在するのですが、特に明確に宣言しなくても、自動で初期化されます。
ですので、

$param= "abc";

と書けば$paramはstring型として初期化され、

$param = 123;

と書けば$paramはinteger型として初期化されます。

文字列型について

文字列の結合

文字列の結合については、以下のように、「.」を使って行います。

$param = "ABC" . "DEF";
$echo $param; // 「ABCDEF」と出力されます

中括弧({})での結合

ダブルクォート(”)の中に中括弧({})をつけることで変数を結合できます。

$param1 = "ABC";
$param2 = "DEF";
$param = "結合した値は{$param1}{$param2}です。";
$echo $param; // 「結合した値はABCDEFです」と出力されます

改行コード

PHPでも一般的なプログラム言語と同様に、「\n」で改行コードを扱うことができます。
プログラムの中で改行コードを出力する場合は、以下のように書きます。

$param = "ABC\nDEF";
echo $param; // ABC[改行]DEF が出力

シングルクォート

シングルクォート(’)でも文字列を囲んで変数に代入することができます。

$param = 'ABC' . 'DEF';
echo $param; // ABCDEF が出力

しかしこの場合は、上記の{}による結合ができません。
また、変数の中に改行コード(\n)を含めることもできません。
使い分けるのが大変な場合は、全部ダブルクォート(”)で書くようにしましょう。

数値型について

+-*/などの記号を使って、演算することができます。

$param = 1 + 2;
echo $param; // 3 が出力
$param = 10 / 2;
echo $param; // 5 が出力
$param = 10 - 2;
echo $param; // 8 が出力
$param = 2 - 10;
echo $param; // -8 が出力
$param = 10 * 2;
echo $param; // 20 が出力

また、特殊なものに、%という演算子があります。これを使うと、割り算の余りを取得できます。

$param = 10 / 4;
echo $param; // 2 が出力
$param = 10 / 5;
echo $param; // 0 が出力
$param = 10 / 3;
echo $param; // 1 が出力
このページをシェア Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn