
サンプル・プログラム
解凍できたら、isleap.php というファイル名でWebサーバ Apache の仮想ディレクトリが通っているディレクトリにセーブすること。
なお、画面に表示している行番号は説明の便宜上のものであり、ソースプログラムには含まれていない。
サンプル・プログラムの実行方法
HTMLとPHPが混在するページ
0001: <!DOCTYPE html>
0002: <html lang="ja">
0003: <head>
0004: <meta charset="UTF-8">
0005: <title>閏年かどうか判定する</title>
0006: </head>
0007:
0008: <?php
0009: // ここからPHPプログラム ===========================================
冒頭はHTML 5の宣言部分である。PHPプログラムは、そのあとから始まる。

なお、HTMLタグとPHPプログラムを分ける方法として、これ以外に、「PHPでCSVファイルを読み込む」で取り上げる「ヒアドキュメント」を使った方法などがある。
if文
0018: /**
0019: * 与えられた年が閏年かどうか判定する
0020: * @param int $y 西暦年
0021: * @return bool TRUE:閏年である/FALSE:平年である
0022: */
0023: function isleap($y) {
0024: $ret = FALSE;
0025: if ($y % 4 == 0) $ret = TRUE;
0026: if ($y % 100 == 0) $ret = FALSE;
0027: if ($y % 400 == 0) $ret = TRUE;
0028: return $ret;
0029: }
われわれが日常使っているグレゴリオ暦では、閏年のルールが次のように定められている。
- 4年で割り切れる年は閏年である。
- ただし、100で割り切れる年は平年である。
- ただし、400で割り切れる年は閏年である。


まず、変数 $y が平年であれば変数 $ret に FALSE を、閏年なら TRUE を代入する。(TRUE, FALSE は PHP があらかじめ用意している定数で、論理値が真なら TRUE、偽なら FALSE のようにして使う)

最初、変数 $ret はFALSEである。次に、変数 $y が4で割り切れる場合は $ret に TRUE を代入する。
割り算の余りは剰余演算子 % で得られる。剰余が0に等しいなら $ret にTRUEを代入することを表すのが、if文 である。if文 の使い方は、CやJavaなど、他の手続き型言語と同じである。
そして、変数 $y が100で割り切れる場合は変数 $ret に FALSEを代入する。
最後に、変数 $y が400で割り切れる場合は変数 $ret に TRUE を代入する。
$_POST変数
0031: //メインプログラム
0032: if (isset($_POST['year']) == FALSE) $year = date('Y'); //初回起動時
0033: else $year = $_POST['year']

ところが、最初にこのプログラムを起動した時にはPOSTで渡されるデータはないので、$_POST['year'] は存在しない。このままでは実行時エラーになってしまう。
PHPでは、変数の存在を調べる関数 isset が用意されている。そこで、 $_POST['year'] が存在しなければ、関数 date を使って、プログラム実行時の西暦年を変数 $year に代入する。
もしPOST渡しされたデータがあれば、$yearには $_POST['year'] の内容を代入する。
ここでは if~else文 が登場する。
HTMLのFORMタグ部分
0039: <form action="isleap.php" method="post">
0040: 西暦年号=
0041: <input type="text" size="10" name="year" value="<?= $year ?>">
0042: <input type="submit" value="調べる">
0043: </form>
ここで、FORM タグを使って西暦年を入力している。西暦年は、テキストボックス year に代入され、POST METHOD によってユーザー関数 isleap.php に渡される。自分自身に渡していることがミソである。これを変数 $year に代入するのである。
なお、"<?= $year ?>" のように記述することで、HTML上に変数 $year の値を展開することができる。
printf関数
変数 $year が閏年かどうか判定して、画面に判定結果を表示する。
関数 printf は、指定された書式に応じて引き数の内容を画面に表示する。詳細はリンク先のPHPマニュアルをご覧いただきたい。基本的にはC/C++の printf 関数と同じで、数字や文字列を整形出力するのに重宝する。
補足

関数 printf はC/C++のものと同様と書いたが、価格などを表す際に整数をカンマ区切りすることができない。こんな場合には関数 number-format を使えばよい。
参考サイト
- オリンピック・イヤーは閏年(うるう年)か?:ぱふぅ家のホームページ
- 西暦2400年はうるう年? うるう年じゃない?:@IT
このような処理は、