日記
Re: [言語]PHP from Matzにっき (13:50)Edit

>>PHPってのは大層人気がある言語だ。(中略)しかし、言語屋あるいは言語設計者の目から見ると、なぜこの言語が人気があるのかがわからない。

私がPHP(4以降)を好きな理由は、

  • Apacheモジュールとしての動作が標準である
    • 普通に書いたスクリプトがそのままモジュール版で動作する、というのがmod_perlとの違い。mod_rubyはどうなんだっけ? Apache restart時のメモリの解放に問題があるとか書いてあった気がするけど。
    • Webアプリケーションの場合、本格的なプログラム(処理時間がかかるもの)というよりは、静的なHTMLにほんのちょっとだけ機能を追加したもの、を作りたい場合が多く、そういう場合にApacheモジュール版の利点が大きい
  • HTMLに埋め込んでも使える
    • 私の場合は、出来るだけコードはHTMLには埋め込まずに書くけれども、Webアプリケーションで必須のHTML出力コードを書く場合には、print文およびヒアドキュメントを使うよりも、HTML埋め込みコードをうまく使った方が可読性が高いと思う。
  • DBアクセスライブラリがほぼ標準である
    • PHPでDBにアクセスする場合は、MySQLもしくはPostgreSQLを使う場合が多いだろうし、その二つがほぼ標準でサポートされている。
  • ほぼC言語ライクな構文だけで書ける
    • Perlみたいに独自の省略表現がないので、他人が書いたコードでも比較的読みやすい。省略表現を多用しすぎると(ほかの言語と行ったり来たりする人間には)扱いにくい
  • classが普通に使える
    • Perlと比べると、classの言語仕様がとてもまともだ
  • Webアプリケーション用の初期化が自動的に行われる
    • PerlでいうところのCGI.pm相当の機能が、ほぼ自動的に初期化済みの段階からコードの解釈が始まる
  • 標準組み込み関数がとにかくリッチ
    • でもまあ、Perlみたいにモジュールがやまほどあってきちんと管理されているのならば、別にすべて標準関数にしなくてもいいんだけどね。でもまあ外部モジュールではなく標準関数としてあった方がいいものも多い
  • 中庸的(ポリシーがない?)ポリシー
    • がちがちになんらかのポリシーに準じて作られているという感じではなく、使う人が自分が使いたいように使っても、それなりに何とかできるって気がする
  • マニュアルがまとまっている
    • 大元のPHPのマニュアルをダウンロードして読めば、それでたいていのことは書かれている。というのは、たいていの機能は標準関数で提供される=PHP自体のマニュアルに説明が書いてあるから。Perlとかだと使いたいライブラリごとにドキュメントを探す必要がある

続いて欠点、

  • 言語仕様ががんがん変わる
    • 言語仕様自体は基本的に互換性を持って拡張されているけれども、標準設定状態での挙動が派手に変わるというのが、ほぼ言語仕様の互換性なしの改変に匹敵する。でもまあ設定関連はほぼフィックスされたかな
  • 関数命名規則がいまいち
    • グローバルな名前空間に標準関数をがんがん追加していくもんだから、わかりにくいプレフィックス付きの関数がとても多くて覚えていられない
  • classの機能がいまいち
    • いまどきの言語としてはclassで実現できる機能はとても少ない
  • 共用サーバーではあまり使いたくない
    • ソースコードを他のユーザーに見られるくらいならばともかく、パスワード関連の扱いとかに困る
  • 過去互換性にひきずられて使いにくい部分が多い
    • global変数をローカルスコープで使うときに毎回宣言し直さなければならない、とか、自動的にaddslashesされる設定が標準だ、とか、過去互換性のために残されている同じ意味を持つ別の表現がいろいろある、とか
  • 異常系のコードが書きにくい
    • 自前のフレームワーク(Web XP)では、エラーハンドラーの書き換えとグローバルなTransaction管理クラスとでサポートしてみたりしたけれど、普通にtry catchしたいなー。

ちなみに、

  • PEARは好きじゃない(ドキュメントと利用例を眺めただけの食わず嫌い)ので使っていない
  • コミュニティには所属していない(PHP-users MLを最近読み始めた程度)

という私は、PHPユーザーとしては全然標準的ではないと思う。って、標準的なPHPユーザーって想定可能なのだろうか? 標準的なRubyユーザーとかJavaユーザーだったらそれなりに想定可能な気もするけど。

反応の反応 → [言語]PHP(その2) - http://www.rubyist.net/~matz/?date=20030728#p02

いろいろ書いたけれども、それらをまとめると、PHPはプログラミング言語としてというのではなく、「Webアプリケーション環境として使いやすい」ことがポイントなのかもしれない。

私自身、PHPの言語仕様には全然萌えないけれども、それでもメインで使っているのは、自分が作りたいWebアプリケーションを一番手っ取り早くプロトタイピングできるのが、今のところPHPだから、なんだろう。

Published At2003-07-27 00:00Updated At2003-07-27 00:00