連載
» 2016年09月27日 05時00分 UPDATE

Dev Basics/Keyword:PHP(スクリプト言語)

PHPは、HTMLへの埋め込みが可能なスクリプト言語(およびその処理系)。主としてWebアプリ開発に使用される。

[かわさきしんじ,Insider.NET編集部]
「Dev Basics/Keyword」のインデックス

連載目次

 PHP(PHP: Hypertext Preprocessor)は、HTMLへの埋め込みが可能なスクリプト言語(およびその処理系)。主としてWebアプリ開発に使用される。PHPを用いて作られているメジャーなプロダクトとしては、WordPress(オープンソースのブログ/CMSシステム)やMediaWiki(オープンソースのWikiパッケージ)などがある。

PHP公式サイト PHP公式サイト

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>


Smartyのテンプレート

 このテンプレートを使って、連想配列の要素を表示する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');


テンプレートを利用するPHPアプリ

 このファイルにはHTMLコードは含まれておらず、純粋にPHPのコードだけで記述されている。細かな説明は割愛するが、require_once文でSmartyを利用するために必要な要素を(一度だけ)インポートしている。その後、上記のテンプレートがあるディレクトリ、テンプレートをコンパイルしたファイルがあるディレクトリをそれぞれSmartyに対して伝えている。そして、連想配列を用意した後に、Smartyを介してテンプレートにその連想配列をセットし、最後にテンプレートを表示している。

 なお、上のコードでは「?>」がないが、これは.phpファイルが全てPHPコードで構成されている場合には、閉じタグは省略する(ことが推奨されている)からだ。

 最初の例では、1つのファイルの中にHTMLとPHPのコードが混在していたが、ここで見たSmartyのようなテンプレートエンジンを利用すると、これらを明確に分離できるようになる。大規模なWebアプリであれば、以下に示すようなWebアプリフレームワークを使用してMVCベースで開発することも可能だ。現在ではPHPは単なる「HTMLに埋め込むヤツ」を超えて、Webアプリ開発に適したモダンなスクリプト言語となっている。


 PHPは主にWebアプリ開発に使用されるスクリプト言語。HTMLにPHPコードを埋め込むことでWebページを動的に生成できる。その一方で現在では、テンプレートエンジンや各種Webアプリフレームワークを利用することで、プレゼンテーション/ロジック/モデルを分離して開発を進めることも多い。

 PHPは公式サイトのドキュメントも豊富であり、日本語の情報も得られること、学習が比較的容易なこと、メジャーなフレームワークが存在することなどから、Webアプリ開発における有力な選択肢として考えたい言語といえる。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。