PHP(スクリプト言語):Dev Basics/Keyword
PHPは、HTMLへの埋め込みが可能なスクリプト言語(およびその処理系)。主としてWebアプリ開発に使用される。
PHP(PHP: Hypertext Preprocessor)は、HTMLへの埋め込みが可能なスクリプト言語(およびその処理系)。主としてWebアプリ開発に使用される。PHPを用いて作られているメジャーなプロダクトとしては、WordPress(オープンソースのブログ/CMSシステム)やMediaWiki(オープンソースのWikiパッケージ)などがある。
PHPの特徴
PHPの特徴としては次のようなことが挙げられる。
- クロスプラットフォーム
- 多くのWebサーバ/データベースをサポート
- 豊富な組み込み関数
- Cなどの言語を基にした習得が容易な構文体系
- オブジェクト指向プログラミングのサポート
PHPはサーバサイドで動作するWebアプリの開発に使われることが多い。単純な形であれば、HTMLコードの中にPHPコードを埋め込み、これをWebサーバ(内のPHP処理系)が解釈/実行することで、動的にWebページが生成される。以下に例を示す。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
$a = [
"forum1" => "Windows Server Insider",
"forum2" => "Insider.NET",
"forum3" => "Server & Storage"
];
?>
<ul>
<?php foreach ($a as $key => $value) { ?>
<li><?= "$key : $value"; /* 短縮構文 */ ?></li>
<?php } ?>
</ul>
<?php
echo "<ul>\n";
foreach ($a as $key => $value) {
echo "<li>{$key}'s name : $value</li>\n";
}
echo "<ul>\n";
?>
</body>
</html>
上の例を見ると分かる通り、HTML中ではPHPタグ(「<?php 〜 ?>」タグや「<?= 〜 ?>」タグなど)の中にPHPのコードを記述していく(「<?= 〜 ?>」タグは「<?php echo …… ?>」の短縮構文。上のコードでは最初のforeachループで使用している)。
PHPコードを含むHTMLファイルの拡張子は通常「.php」となる。.phpファイルを解釈/実行できるように構成されたWebサーバが、これを処理することで、Webページが動的に生成される。例えば、上のHTMLファイルを実行すると次のようになる。
上のコードを見ると、1つ目のforeachループのようにHTMLの個々の要素にPHPコードから出力される値を埋め込むことも、2つ目のforeachループのようにPHPコードの側でHTMLコード片を出力することも可能なことが分かる。
ただし、前者はHTMLコードとPHPコードが頻繁に入れ替わり、コードの可読性がよいとはいえない。後者はコードの見通しはよいが、ロジックにUI要素が含まれてしまう。こうしたことから、テンプレートエンジンや各種のフレームワークを使って、UI要素とロジックの明確な切り分けを行うことも多い。
テンプレートエンジン
UI要素とロジックの分離を行う一例として、ここではテンプレートエンジン「Smarty」を見てみる。
Smartyを使うと、PHPアプリのUI要素をテンプレート(.tplファイル)へ、アプリのロジックを純粋なPHPコード(.phpファイル)へと分離できる(テンプレートはPHPコードを含んだHTMLファイルにコンパイルされ、それが実際の表示には使われる)。
ここでは上で示した単一のファイルをテンプレートとロジックに分割してみる。
UI要素を含んだテンプレートは次のようになる。先ほどはHTMLコード内に連想配列の定義、それらを表示するforeachループがあったが、ここでは{}に囲まれたSmartyの構文要素とHTMLの各種タグが記述されている。テンプレートの要素はPHPタグを使わずに{}だけを用いて記述されているので、可読性は比較的高い。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<ul>
{foreach $array as $value}
<li>{$value@key}'s name: {$value}</li>
{}
</ul>
</body>
</html>
このテンプレートを使って、連想配列の要素を表示するPHPコードは次のようになる。
<?php
require_once 'vendor/autoload.php';
$s = new Smarty();
$s->template_dir = './templates';
$s->compile_dir = './templates_c';
$a = [
"forum1" => "Windows Server Insider",
"forum2" => "Insider.NET",
"forum3" => "Server & Storage"
];
$s->assign('array', $a);
$s->display('smarty_test.tpl');
このファイルにはHTMLコードは含まれておらず、純粋にPHPのコードだけで記述されている。細かな説明は割愛するが、require_once文でSmartyを利用するために必要な要素を(一度だけ)インポートしている。その後、上記のテンプレートがあるディレクトリ、テンプレートをコンパイルしたファイルがあるディレクトリをそれぞれSmartyに対して伝えている。そして、連想配列を用意した後に、Smartyを介してテンプレートにその連想配列をセットし、最後にテンプレートを表示している。
なお、上のコードでは「?>」がないが、これは.phpファイルが全てPHPコードで構成されている場合には、閉じタグは省略する(ことが推奨されている)からだ。
最初の例では、1つのファイルの中にHTMLとPHPのコードが混在していたが、ここで見たSmartyのようなテンプレートエンジンを利用すると、これらを明確に分離できるようになる。大規模なWebアプリであれば、以下に示すようなWebアプリフレームワークを使用してMVCベースで開発することも可能だ。現在ではPHPは単なる「HTMLに埋め込むヤツ」を超えて、Webアプリ開発に適したモダンなスクリプト言語となっている。
- CakePHP(日本語サイト)
- Symfony
- CodeIgniter(日本CodeIgniterユーザ会)
- Zend Framework
- FuelPHP(日本語ドキュメント)
- Laravel(日本語サイト)
PHPは主にWebアプリ開発に使用されるスクリプト言語。HTMLにPHPコードを埋め込むことでWebページを動的に生成できる。その一方で現在では、テンプレートエンジンや各種Webアプリフレームワークを利用することで、プレゼンテーション/ロジック/モデルを分離して開発を進めることも多い。
PHPは公式サイトのドキュメントも豊富であり、日本語の情報も得られること、学習が比較的容易なこと、メジャーなフレームワークが存在することなどから、Webアプリ開発における有力な選択肢として考えたい言語といえる。
参考資料
- PHP: Hypertext Preprocessor: PHP公式サイト
- PHP マニュアル: 公式サイトで提供される日本語ドキュメント
- 日本PHPユーザ会: 日本語のコミュニティーサイト
Copyright© Digital Advantage Corp. All Rights Reserved.