Disるのに忙しくて最近のPHP(5.4以降)のこと全然知りませんでした。
今日触る機会があったんですが見直しちゃいました。変なフレームワークさえ使わなければjsとかrubyよりまともに書ける気がする。
びっくりした点、良い点
- タイプヒント。 型が合わなければこけてくれる。スカラー型も使えればもっと良かった
- 例外。PEARのライブラリも例外吐くようになってた。便利
- なんか配列の書き方かっこよくなってる
- ネームスペース。嬉しい!
- クロージャのuse。明示的に外の変数を指定するのがとても良い。デフォルトが値渡しなのと併せて、命令的に書くには一手間かかるようになって、関数型っぽく書きやすくなる
- array_*系の充実した高階関数がクロージャが入って使いやすくなった。
- "PHP 5はオブジェクト指向言語ではありません" Rocks!!!!
これは昔からだけど、オブジェクト以外はデフォルトが値渡しなのが嬉しすぎる。非効率ではあるけど参照透明性が壊されにくくなるので。
<?php function blah (array $arr) { $arr[1] = "blah blah blah"; return $arr; } $arr1 = [1, 2, 3, 4]; $arr2 = blah($arr1); print_r($arr1); /* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) */ print_r($arr2); /* Array ( [0] => 1 [1] => blah blah blah [2] => 3 [3] => 4 [4] => 5 ) */ //Referential transparency rocks!!
昔PHPかじってた頃はこれの利点なんて知らなかった。
参照渡しなるべく禁止、クラスを書かない、なるべくオブジェクトを使わない(ライブラリを使うのはOK)、フレームワーク使わない、MVCは名前空間で分ける、ルーティングライブラリ(Routyいい)使うとかすればかなり楽しく書ける気がした。ClojureでCompojureとClutch(CouchDBのドライバ)とHiccupとか使って書いた時とフィーリングが似てた。
あとね、scalaとかOpaとかreactとかのhtmlリテラルっぽいことをやるとちょっと楽しい。
<?php function render_tweets (array $tweets) { array_map(function ($tweet) { ?><div> <h2><?= $tweet["screen_name"] ?></h2> <p><?= $tweet["text"] ?></p> <div><? }, $tweets); }
爆笑されました。
小規模なサーバをちゃっと書くにはいいんじゃないでしょうか。