タグ別アーカイブ: 前処理

PHPプログラマーが知らないPHPの用法

この話題はリニューアル前のサイトでも取り上げたことがあります。簡単にいうと、PHPを使ったソースコードの前処理を行おうということです。

「PHPプログラマーが知らない…」とは書きましたが、もちろん知っている方も少なくないとは思います。ですが、大多数のPHPプログラマーはHypertext Preprocessorの名が示すように、HTMLに埋め込んで使う用法しか知らないのではないでしょうか? おそらく、コマンドラインでPHPが使えること自体を知らない可能性さえあります。

PHPは通常、基本的にHTMLが書かれたソース中に、<?php ではじまり ?> で終わるタグを埋め込むことで使えるようになります。しかし、埋め込む相手はHTMLである必要はなく、CやJavaのソースに埋め込んでも何ら問題ありません。実際、期待通りに前処理を行ってくれます。

Javaのようにプリプロセッサがない言語の場合、PHPはかなり強力なツールになります。CやC++のような前処理ができる言語であっても、標準のプリプロセッサよりははるかに高度な機能を提供することができるのです。

具体例を挙げましょう。配列やコンテナの要素を静的に整列するといったことは、Cのプリプロセッサではごく限定的な状況をのぞいて実現することはまず無理でしょう。しかし、PHPを使えばいとも簡単に実現できてしまいます。

PHPを使えば、バイナリファイルを配列の初期化子として展開するような前処理を行うことさえできます。これは標準のCプリプロセッサでは不可能です。

ほかにも、Cのプロトタイプを解析してC#のためのDllImportを自動生成するとかいう荒技もできてしまいます(もちろん、PHPのコードはそれなりに複雑になりますので、がんばって実装する必要があります)。

このように多くのメリットを持つPHPによる前処理ですが、弱点がないわけではありません。一番大きな弱点は、インテリセンスのような入力補完機能の邪魔をするということでしょうか? EclipseでJavaを使うときなど、ツールがいろいろおせっかいを焼いてくれる環境の場合は、結構大きな制約につながるかもしれません。

PHPによる前処理を行うと、状況にもよるのですが、行番号がずれてしまい、エラーメッセージが読みにくくなるという問題もあります。

このようにPHPによる前処理は万能ではなく欠点もあります。ですので、すべてのソースファイルをPHPで前処理するのではなく、一部の本当に前処理が必要なソースだけPHPを通すというのが現実的な使い方かと思います。