bradtosのWEB開発日記

WEB開発エンジニアbradtosによる、JavaScriptやHTML5/CSS3の最新情報などなど・・・



2009-10-15

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

12:00

久しぶりの日記。

先月から以前お世話になった関係で

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 = {};

のほうがよい。

phperphper 2013/08/15 17:13 プログラム言語には3つの要素があります。
1、速度
2、可読性
3、保守性
phpで宣言せずに書くのは、速度と可読性のためです。
保守性を捨ててでも、速度を可読性を重視するのがphpのベテランです。

ある意味、割り切って書けるのでphpは良いと思います。
とくに、webサイト(モバイルサイト)においては制作速度が重視される傾向にあります。大がかりなサイトを作るわけではなく、たいていのwebサイトはバグなど発生しようがないほど、しょぼいシステムで出来ています。
ということは、保守性などあまり意味がないわけです。

つまり、phpとモバイルサイトは最高の相性だといえます。

パソコンサイトや、本格的なwebサイトの場合には、perlを使うか、c言語を使うといいかもしれません。
※グーグルは、phpよりも手軽なpythonを使っているようです。