標高+1m

Don't be rational

最近のPHPが割と良くてびっくりした

Disるのに忙しくて最近のPHP(5.4以降)のこと全然知りませんでした。
今日触る機会があったんですが見直しちゃいました。変なフレームワークさえ使わなければjsとかrubyよりまともに書ける気がする。

びっくりした点、良い点

  1. タイプヒント。 型が合わなければこけてくれる。スカラー型も使えればもっと良かった
  2. 例外。PEARのライブラリも例外吐くようになってた。便利
  3. なんか配列の書き方かっこよくなってる
  4. ネームスペース。嬉しい!
  5. クロージャのuse。明示的に外の変数を指定するのがとても良い。デフォルトが値渡しなのと併せて、命令的に書くには一手間かかるようになって、関数型っぽく書きやすくなる
  6. array_*系の充実した高階関数がクロージャが入って使いやすくなった。
  7. "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);
}

爆笑されました。

小規模なサーバをちゃっと書くにはいいんじゃないでしょうか。