PHPを別ファイルにしよう!htmlソースコードをキレイにする

htmlからphp PHP

今回はhtmlファイル内にphpコードを記述する際に、すっきりキレイにさせる方法を書いていきます。
こちらの記事のソースコードを使用します。

htmlファイルとphpファイルを分ける

まずは、htmlファイルとphpファイルに分けましょう。
今回も保存先はC:\xampp\htdocs\testです。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>PHPでカレンダー作成</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
<?php
    require_once('common.php');
    print_calendar();
?>
</body>
</html>
<?php
function print_calendar(){
/* 見出し(曜日)の配列を作成する */
    $youbi = ['日','月','火','水','木','金','土'];
/* 今月頭の年月日を取得する */
    $today = date('Y-m').'-01';
/* 表示するカレンダーの年月を表示 */
    print date('Y年m月');
/* テーブルタグを表示 */
    print '<table>';
/* 見出し含め、7行分ループ処理 */
    for($i=0;$i<7;$i++){
/* テーブルのtrタグを表示(行) */
        print '<tr>';
/* 一週間(7日)ループ処理 */
        for($j=0;$j<7;$j++){
/* 見出し部分(最初の行)か */
            if($i==0){/* $iが0の時は、先頭行なので、曜日を表示する。 */
/* 今表示するのは何曜日? */
                switch($j){
                    case 0:/* 日曜日(クラス付与)  */
                        print '<th class="Sunday">';
                        break;
                    case 6:/* 土曜日(クラス付与)  */
                        print '<th class="Saturday">';
                        break;
                    default:/* その他 */
                        print '<th>';
                        break;
                }
/* 曜日を表示 */
                print $youbi[$j].'</th>';
            }else{/* $iが0以外の時は、2行目以降なので、日を表示する。 */
/* 処理する日は今月か? */
                if($today<=date('Y-m-t') && date('w',strtotime($today))==$j){
/* 今表示するのは何曜日? */
                    switch($j){
                        case 0:/* 日曜日(クラス付与)  */
                            print '<td class="Sunday ';
                            break;
                        case 6:/* 土曜日(クラス付与)  */
                            print '<td class="Saturday ';
                            break;
                        default:/* その他 */
                            print '<td class="';
                            break;
                    }
/* 今日は背景を黄色にする(クラス付与) */
                    if($today==date('Y-m-d')){
                        print 'Today';
                    }
/* 日を表示 */
                    print ' ">'.date('d',strtotime($today)).'</td>';
/* 次の処理用に年月日を+1日更新 */
                    $today = date('Y-m-d',strtotime($today.' +1 days'));
                }else{
/* 今月外の場合は枠だけ表示 */
                    print '<td> </td>';
                }
            }
        
        }
/* テーブルのtrタグ終わりを表示 */
        print '</tr>';
    }
/* テーブルの終わりを表示 */
    print '</table>';
}
?>

ついでにCSSも分けましょう。

table,tr,td,th{ border: solid 1px black; border-collapse: collapse; }
.Saturday{ color:blue; }
.Sunday{ color:red; }
.Today{ background:yellow; }

一部コードが変わっていますが、これで別ファイルにphpコードを記述することができました。
整理すると、C:\xampp\htdocs\testの下に下記3つのファイルができました。
・study_calendar.html
・common.php
・style.css

できたら、xamppを立ち上げて、http://localhost/test/study_calendar.htmlにアクセスしてみましょう。

コードを分散
表示できました。


PHPカレンダーの解説

まずはhtmlから解説します。
元の記事で、bodyに直接phpコードを記述していましたが、今回は9行目~12行目だけになっています。
9行目と12行目は、ここはphpコードですよの記述です。
10行目は、common.phpを読み込んでいます。
今回はtestフォルダにcommon.phpを保存していますが、例えばtest/php/というパスならば、ここの記述はphp/common.phpとなります。
11行目でprint_calendarという関数を実行しています。

次にphpの解説です。
元の記事の、body内のコードをすべてこちらに移しています。
1行目と69行目は、ここはphpコードですよの記述です。
2行目でfunction print_calendar()というコードを追加してありますが、これは関数を定義していて、{}で囲まれた部分がprint_calendar()で実行されます。
逆にいうと、htmlファイル内でprint_calendar()を記述した箇所で、{}で囲まれた部分が実行されます。
3行目から67行目は、元の記事のbody内のコードです。

【おまけ解説】関数の名前は内容を連想させるように

今回作った関数の名前はprint_calendarでした。
ぱっと見て、”あぁ、calendarをprintするんだな。”というように、関数名をつける際は、名前だけでなんとなく何をするかわかるようにするのが基本です。
勉強用だと気にしませんが、開発規模が大きくなるにつれて、管理するのも大変になりますからね。
私は勤怠システムを作って、途中で自爆しましたので。(ちゃんと整理しました。)
関数名だけではなく、変数名もなるべくわかりやすいほうが良いです。
ただし、長くなりすぎてもコード自体の可読性が下がりますので、いい感じのところを見つけましょう。
私は名前を決める際には”動詞名詞”としています。
(Get_hogehoge,Set_hogehoge等々。)