PHPの良いとこ悪いとこ

去年一年で感じた良いとこ悪いとこ。

良いとこ

簡単

何といっても簡単なのがいい。
PHP案件の作成受注受けて参考サイトのソースコードもらったら翌日からもうコーディングできたぐらい簡単。
見たのはPHPドキュメントPHP4徹底攻略―Webとデータベースの連携プログラミングぐらい。
お手軽簡単がやっぱり最大のメリットやね。

連想配列が気持ち良すぎる

JavaとかDelphiのがっちがち型制約言語に慣れてたから、この連想配列の使い勝手の良さはかなり衝撃だった。
JavaでいうとこのHashmapとオブジェクトでのデータツリーみたいなのが連想配列だとさくっと作れたりして。
これに慣れたらJavaの手続きが面倒に感じてアカン。

var $data = null;
$data["session"]["user"]["userId"] = $_GET["id"];
$data["session"]["user"]["userPass"] = $_GET["passwd"];

$authResult = doAuth(& $data["session"]["user"]);

みたいなのが楽すぎてイカス。

脳みそに優しい型無し言語

基本的にキャストとか関係なし。
変数作ったら文字だろうが数字だろうがクラスだろうがとりあえず何でも突っ込める。
IO作る時に型に悩む必要が無いからものっそい楽。
困ったらとりあえず連想配列入れとけみたいな。

データベースとの連係が楽すぎ

DBつーか結果セット*1の取扱いが連想配列と同じように出来るから、データベース扱うのが楽すぎる。

SQL実行して結果セットから読み込むのなんて

$bRet = OCIExecute ($stmt);
if ($bRet == false) {
print "cannot execute sql:\r\n";
print "query=".$sql."\r\n";
return false;
}

while (OCIFetchInto ($stmt, $data, OCI_ASSOC)){
$access[] = $data ;
}

こんだけ。

使いやすい制御構文

つかforeach。
連想配列のキーと値のマップを1構文で扱えるのがイカ
javaのCollectionフレームワークよかこっちのが好きかも。

$data["apple"]="red";
$data["orange"]="orange";
$data["grape"]="purple";
$data["banana"]="yellow";
$data["green apple"]="green";
$data["tomato"]="red";
$data["pine apple"]="yellow";

foreach($data as $fruits -> $color ){
print $fruits ." is ".$color ;
}

とか。
ああ楽ちん。

悪いとこ

ライブラリのネームスペースが無い

これはdelphiも一緒だけど、ライブラリにネームスペースが無いから同名のライブラリがあると、ライブラリパスの優先順位によって読み込まれるライブラリが一意に決まっちゃう。
小規模のサイトだったらこれでも十分なんだけど、ちょっと大規模の開発になるとこれを避けるためにやたら長い名前のファイルにしないとならん。
これはスマートじゃないやね。

自由すぎる連想配列

連想配列は自由に何でもつっこめるんだけど、それの代償として、連想配列の管理を任される事になる。
これは一人で全部コーディングするなら問題にはならないんだけど、複数の人間でコーディングするような場合、このへんの取扱いをかなり厳密に設定しておかないと後々爆発する巨大な爆弾を抱えることになりそう。

つーかコーディング規約をかっちり決めとけばいいんだけどね。

楽すぎる

これを言ったら身も蓋もなくなっちゃうんだけど、簡単すぎるが故にこれからプログラムの世界に入ってこれだけやってるエンジニアは育っていかない気がする。
何と言っても最初に言語ルールさえ覚えちゃえば大概のことはその組合せでできちゃうから、自分で脳味噌ふりしぼって考えるという習慣が身に付かない気がする。

もちろんこれはphpだけに該当するわけじゃなくて、おおよそ世の中で言われているフレームワーク全般に付いて言えるわけだが。

*1:javaだとjava.sql.ResultSet