2009-08-26 (水)
*PHP
なんでPHPでプログラムを書くことが苦痛なのか考えてみた.
名前空間が定義できない
これはひどい.一時期入ったみたいだけど,何か問題があって消えたらしい.
5.3では復活してるみたいだけど,世の中にあるライブラリがすでに名前空間無しで書かれているので浸透するのにしばらくかかりそう.
標準の関数が使いにくい
便利な関数をたくさん用意してくれたのはうれしいのだけど,引数の指定の仕方とかに統一感が無い.
isset,is_null,emptyあたりの関数の動作も難しすぎるんじゃないかなぁ.そもそもなぜis_setやis_emptyじゃないだろうか.
preg系の関数の実装が微妙すぎる
Perl互換と言いながら,実装がとても中途半端.
preg_replaceで「/e」を付けると,後方参照文字列内のダブルクォートとかを勝手にエスケープしてくれるのだけど,「$」とかを放置するので脆弱性を作りやすくなる.変なコードを挿入されないために,参照時にシングルクォート使うと,今度はダブルクォート前の「\」が消えてくれなくて困るので,結局自分でエスケープをやり直さないといけない.
正規表現のエスケープのための\Q~\Eの処理も不完全.
実行時間のオーダーが予想できない
たとえば,巨大な連想配列の要素に対するissetは一瞬だけど,array_key_existsはとても時間がかかるとか,マニュアル見ても関数の説明からは予想できない.array_key_existsが連想配列のサイズに対してO(n)な気がするのですが,なんでそんなことになってるのかなぁ.
パフォーマンスを保障しなければいけないときは,PHPのソース見てその関数がどういう実装されているか確認して使わないと危険かもしれない.
文字列リテラルのエスケープが気持ち悪い
エスケープできない文字をエスケープしてしまうと何も言わずに「\」を残したままにするとか,他の言語には無い稀有な動作をします.
そして「\b」とかの一般的なエスケープにも対応していないので,タブや改行以外のコントロールコードを埋め込むのに苦労する.
「a\b\n」と書いて,画面に「a\b」と出たときは目を疑いました.
Web上の情報が不安
私はPHP初心者なのでWebの情報とかも参考にしながらプログラムを書くのですが,なんだか不安な気持ちになることが多い.
最初はサンプルコードがたくさんあってうれしいとか思っていたのですが,複数のサンプルを見比べていると,違うコードなのに同じ処理の部分に同じ問題を含んでいることがあって不思議に思ったし,どうも,「これをしたいときは,こう書く」みたいな何も考えずに使うことを推奨しているようなコードがたくさんあります.
もしかして,多くのPHPプログラマは,Web上の情報をコピペに近い形で切り貼りしてアプリケーションを作っているのでは無いかと不安になりました.
Web関係以外の機能が乏しい
まぁ,これは仕方ないのかもしれませんが.
こんな便利な機能があるんだから,これくらいのことはもっと簡単にできるだろう,と思っていたりすると,実際は難しかったりするのが残念.
他にも色々
なんか,まだ使い始めたばかりなのに,きりが無いです.
逆に良いことも
- Webに特化した機能はたくさんある
- 言語自体は単純で覚えやすい
- 比較的シンプルでまともなオブジェクト指向
使うだけなら簡単でよい言語な気もするし,PHPプログラマは安く大量に雇えるというのが流行っている原因かも.
PHPプログラマになりつつある自分の未来が不安になってきます.