業務アプリ開発講座

html headの関数化

headタグを関数化するにあたり、その関数を格納するファイルを作成します。

bookmin/includes/classes/AppMasterHtml.phpを作成します。アプリ全体で使用するようなHtml Tag生成関数群を格納するという意味で[Application Master Html Tags]、略して[AppMasterHtml]と命名します。英文として正しいかどうかはさておき、そのファイルがどういうものであるかを推測しやすく命名することが大切です。

作成したAppMasterHtml.phpに書きコードを追記します。

<?php
function htmlHeader(){

	return <<<DOC
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text.php" charset="utf-8">
	<title>Bookmin 管理</title>
	<base href="http://www-dev.bookmin.jp/bookmin/manager/">
	<link rel="stylesheet" href="../assets/style.css" type="text/css" charset="utf-8">
</head>
<body>
DOC;
}
?>

phpの関数は頭にfunctionと宣言し、続いて任意の関数名( )を書きます。そして関数の処理内容を波カッコ{ }内に記述します。

function funcName(){}

これが関数の基本形です。()や{}の前後にスペースを入れて見やすくしたりすることも可能です。

function funcName ( args ) {}
コラム:カッコの位置論争

クラスや関数の波カッコ{}の位置について、様々な書き方が存在します。その中で多くを占めているのが下記の2パターンでしょう。それぞれに信望者がいまして、どちらがあるべき姿かは長年論争されてきていますが、結局のところ好みでしかありません。どちらもコードの見やすさを追求した結果のようですが、人が赤色が好きとか黄色が好きというのと大差ありません。個人でやる場合には好きな方、自分が見やすいと思う方でコーディングすれば良い事ですが、プロジェクトや組織で開発をする場合はそうはいきません。どちらかに統一しないと全体として開発効率が悪くなってしまいます。よく話し合って決める方が良いのでしょうが、大概は立場上力のある人のツルの一声で決まるのでしょう。

あくまで主観ですが、K&RスタイルはLinux、Mac系のプログラマーに、オールマンスタイルはWインドWindows系のプログラマーに好まれているように見受けられます。とは言っても、それぞれのプログラマーが意識してそのスタイルを使っているというより、MacのIDEであるXcodeのデフォルトのスタイルがK&Rスタイルになっていて、WindowsのIDEであるVisualSudioのデフォルトのスタイルがオールマンスタイルになっているからにすぎません。そしてそれらIDEを長年使っていれば、そのスタイルに慣れてしまっているというだけのことかもしれません。では、XcodeとVisualStudioは、なぜデフォルトのスタイルをそのように決めたのでしょうか。それは、それぞれの開発プロジェクトにおいて力のある人、部長さんかプロマネかわかりませんが、決定権のある人の好みで決められたはずです。決定するまでの過程では様々議論されたことでしょう、ですが最終的に決めることができるのは決定権のある人個人です(複数人かもしれませんが)。そこには合理的な理由というより、個人的な感覚に対する後付けの理由しかありません。そして、デフォルトのスタイルがIDEに組み込まれ、それを使うプログラマーは、ソースはこういうものだと何の疑問も抱かずに慣習化されて行き、そこにある種のプログラミング文化が形成されていくのです。うがった見方をすれば、個人の好みに無意識に同化されていくわけです。

要するに自分が見やすいと思うスタイルで構わないということと、とは言っても組織で開発をする場合は、どちらかに統一しましょうということです。どちらが正しいかという議論は無意味なのでやめておきましょう。

[K&Rスタイル]
function funcName ( args ) {
}
[オールマンスタイル]
function funcName ( args ) 
{
}

AppMasterHtml.php内の関数htmlHeader()は、戻り値として、これまでに作成したindex.phpstaff-list.php<!DOCTYPEgt;から<body>までをヒアドキュメント方式で格納しただけです。これで、HTMLのhead部分を関数化できました。この関数をindex.phpで利用する方法が下記です。

<?php
require_once('../includes/classes/AppMasterHtml.php');
?>
<?= htmlHeader() ?>

まず、作成したAppMasterHtml.phpに記述した関数を利用できるようにindex.phpからAppMasterHtml.phpを読み込みます。読み込む際の命令文がrequire_once()です。引数にAppMasterHtml.phpのパスを渡します。VirtualHostを設定していますので、ここでは相対パスを渡しています。

それでは詳しく見ていきましょう。

<?php
?>

これは、PHPコードブロックですね。この中にPHPコードを記述していきます。また、この中に書かれたコードをサーバーはPHPとして解釈し、実行されます。

2行目のrequire_once()は前述した通りです。

4行目の<?= htmlHeader() ?>は、先ほど作成した関数を呼び出しているわけです。

<?= ?>ブロックは、省略形の記述方法で

<?php
echo htmlHeader();
?>

と同じ意味になります。
HTML内にPHPを埋め込む際に書きやすい記述形式です。