移転しました。

PHPは一発屋としては最高

いろいろPHPがひどく言われている模様。
404 Blog Not Found:そろそろPHPに関して一言いっとくか
IT戦記 - じゃあ、僕も PHP について一言いっとくまうす
もちろん、物申している方もいる。
odz buffer - PHPに文句を付けている dankogai 氏にひとこと言っておくか
なんというのか、そうなんだけどとしか言いようのないところで皆さん批判するからもっともだし反論する気にもならない。でも、多くの人の意見は「プログラマがプログラムするために使うなら」という前提条件の元で書いているのではないかと思う。個人のホームページにメール送信フォームを設置したい人とかは華麗にスルーなのか?とか思う。
さてさて、PHPでも普通にプログラム書くことはそれなりにできるのだけれども、自分としては一発屋としてのPHPの素晴らしさを強調したい。一発屋というのは単一機能なコンパクトCGIが欲しいときにこれほど便利な言語はないという意味で解釈して欲しい。
たとえば、リクエストされたファイル名とファイル内容を保存するCGIを作るときにPHPだと以下の一行だ。

<?php
file_put_contents($_REQUEST['name'], $_REQUEST['value']);

※上記の例は無謀すぎたのでコピペして利用したりしないでください。追記しました。

「リクエストの値をチェックしろよ」とかはもっともなのだけれども、例を単純にするためにというのと、多分どんな言語でも値をチェックするならもう少し行数いるだろうと思うので。あと、例えば話、自分用に作ったものとかだったらこんなトンデモな仕様でもできてしまうものなので。とりあえず、こんな具合に一発屋CGIとしてなら自分はPHPを素晴らしい言語だと思っている。
なぜ、上記のような無謀な例を出したのかというと、それくらいにPHP自体によって提供されたグローバルな関数が山ほどあって、その関数に頼ると「一発屋CGIはあっという間に完成する」ということの実例で示したかったからだ。本当に関数は山ほどある。
例えば、PHP: 配列関数(array) - Manualの下の方にある関数群を見て欲しい。仮にこれらの関数をArrayオブジェクトのメソッドだとしてとらえたならば、こんなにメソッドがあるのは頭がおかしいのではないかと疑うくらいだろう。なんというのかPHPはこれこそ良い感じなのだと思う。配列をソートしたいなら

<?php
sort($hoge);

連想配列のキーでソートしたいなら

<?php
ksort($hoge);

という、やりたいことをその瞬間に済ますというスタンスでみると素晴らしいのだと思う。
自分はそのようにPHPを理解していたので、PHP5で大規模PHP対策な仕様になったのが残念だったのだけれども、とはいえPHP5を使ったとしても今まで通り気軽なCGIに取り組むことは可能だ。要するに、PHPという言語は「プログラミングしたくない人にお勧めできる言語」ということになるのではないかと思う(もちろんPHP言語開発者の意図・願望は知らない)。
さて、一発屋としてのPHPを押してみたのだけれど、PHP生粋の人たちには、「一発屋PHPなんかじゃなくてMVCフレームワークも一杯あるし、とにかくWebサイトの構築にはPHPは大いに貢献しているではないか!」というような批判を貰いそうだなと感じた。確かにそうだと思う。PHPでWebサイトの構築は明らかに可能だろう。ただし、構築できることとベストな言語であること別問題だ。
特にPHPは負荷に対する取り組みが適当な印象を受ける。例えば、PHPコンパイル済みバイトコードをキャッシュするのに、APCを使うとか、有償でZend使うとか、そういう発想が結構意味不明だったりする。それこそPHP自身が実装して吸収してしまえば良いのにと思うけれど、どうだろうか。
おかしいな、PHP最高という話をするはずだったのに最後に批判的な意見を述べてしまった。いや、便利な言語なんだ、PHPは。苦し紛れにまとめると、バイト数を争わない気軽なワンライナーを使うのだったらPHPは良い言語だよといったところか。


余談だけれどもDanさんの書いていた例は普通はforeachを使うのが一般的だと思う。以下のように。

<p>以下の環境変数が設定されています:</p>
<pre>
<?php
foreach($_SERVER as $k => $v) {
  echo htmlspecialchars("$k=$v\n");
}
?>
</pre>

かなりの余談だ。どっちでも良い話。
id:odzさんの意見を尊重してhtmlspecialcharsを入れています。


[追記]
PHP について (2) - セキュリティについての考え
トラックバックでツッコミを頂いた。そして安全性に欠ける例えを様々な知識レベルの人が閲覧するWebで公開しているのもよくないことだなと反省したので、注釈を追加しておいた。
ご指摘ありがとうございました。