技術情報:悩ましいこと PHPの配列

久しぶりの日記。

先月から以前お世話になった関係で
PHP4で動作するASPの保守・改修の仕事をしているのだが、
やっぱりPHPは最悪だな〜と思う日々。
もう、4とか5とか6とか言うレベルじゃない。。
WEBアプリ言語としてかなりの地位が確立されているのは認めるけど、
確実にエンジニアの能力を留まらせてしまうと思う。
特に初めての言語がPHPだったという人は、
その将来がどうなるか想像に容易いというもの・・・
とまあ私情は置いておいて。






さてPHPは標準でいろいろな配列関連の関数が用意されていて、
基本的にデータ構造を保持するために配列を使うことが多いかと。
そこで、特にインタプリタ型言語を使用する場合は速度を気にする人が多いと思うが
今回はそれについて少し。




プログラムを書く上で大切なのは
実行速度はもちろん、保守性、可読性の高さだと思う。
JavaScriptもいろいろな書き方ができるし、
PHPもその例に漏れないという例として、配列操作を挙げたい。


まず
$arr = Array();
とすることで配列を宣言できるのだが、
そもそもスコープがないし、JS以上に宣言の必要がない。
しかし、語弊はあるが、上記の宣言がないと、
array_push()【JSでいうArray.push()】が使えない。
もちろんそれ以前に対象の変数が配列の型になっていれば話は別だが。




自分は可読性重視のためJSでもPHPでもなるべく宣言するようにしているため
$arr = Array();
と宣言し、要素の追加は
array_push($arr,)
と書くようにしているのだが、
PHPオンリー?なプログラマはいきなり
$arr[0] = "0";
$arr[1] = "1";
などと書いてたりする。
これだけで$arrは配列として扱われてしまう。
むしろいきなり$arr[0][0] = "0";なんてのもできたりするので、
多次元配列が瞬時にできあがる。
個人的にはこういうのはかなり嫌い・・・




しかし最近PHPの実行速度が気になって調べていたところ、
宣言や要素の追加に関数を使うと速度が低下するとのこと。
確かにどの言語も関数呼び出しはオーバーヘッドがあるため、
必要ないのにArray()宣言したり
$arr = "0"でいいのにarray_push()したり
速度的にはいいとは言えない模様。




少なくともPHPにおいて、速度と(自分にとっては)可読性は
相反する要素らしい。
正直$arr
= "0"なんてやる人は
PHPオンリープログラマか、単に関数が嫌いな人だと思っていたのだが、
速度のことを重視したベテランもそう書くのかもしれない・・・
なんて思うと悩ましい。




みなさんはどっち派ですか?




【おまけ】
もはや有名だが
JSで配列宣言する時は
var arr = new Array();
ではなく、
var arr = [];
とするとよい。
同じく
var obj = new Object();
ではなく、
var obj = {};
のほうがよい。