IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

PHP で引数をそのまま返す関数を作っておくと便利

PHP では以下のように new してすぐメソッドを呼べない

<?php
    new DateTime()->getOffset();

なので、引数をそのまま返す関数を作ってやると

<?php
    function expr($a) { return $a; }

    expr(new DateTime())->getOffset(); // OK!

便利だなー

おまけ

配列アクセス用のも作っておくと便利

<?php
    function expr($a) { return $a; }
    function idx($array, $i) { return $array[$i]; }

    echo idx(idx(expr(new DateTimeZone('Asia/Tokyo'))->getTransitions(), 0), 'abbr') . "\n";

おまけ2

無名関数をそのまま呼ぶときにも使える。

<?php
    function expr($a) { return $a; }
    expr(function() { echo "hello\n"; })->__invoke();

おまけ3

配列は、以下のようにして繋ぐことも

<?php
    class Ref { var $val; function __construct($a) { $this->val = $a; } } 
    function ref($a) { return new Ref($a); }

    ref(array(1, 2, 3))->val[0];

じゃあ、僕も PHP について一言いっとくまうす

はじめに

僕は、 PHP なんて大っ嫌いなんだから!って訳じゃないですよ><。
すごくいい言語だと思うし、プログラミングの入り口としては最高じゃないかなって思ってます。
おまけに、環境さえ整ってれば拡張子を html から php に変えるだけで、すぐプログラミングできるしね!

ただ

僕にはもう PHP を始められないたった一つの理由があるんでつ><

それは

PHP にはクロージャがない><
スクリプト言語なのに・・・。

クロージャがあれば

僕は諸手を挙げて PHP をやりたいです><

でも、でも、

クロージャのないスクリプト言語はもう触れない体になってしまったのです。

なんでって?

だって、

function hoge(e) {
   :
  e.addEventListener('fuga', function() {
    e.piyo();
  }, false);
   :
}

とかできない><
クロージャがなかったらこうですか?

function FugaListener(e){
    this.e = e;
}
FugaListener.prototype = {
    onfuga: function() {
        this.e.piyo();
    }
};

function hoge(e) {
   :
  e.addEventListener('fuga', new FugaListener(e), false);
   :
}

めめめんどくさすぎる><

処理はもう頭にできてるのに FugaListener と onfuga って名前を考えなきゃいけなかったよ
思考が中断されて泣きそうになったよ><

でも

きっと、僕がめんどくさがり屋だからよくないと思うんだ。

PHP たんは悪くないよ><!

でもさ、みんなもっともっとめんどくさがり屋(怠惰)でもいいような気もするんだ。

それは、僕の傲慢なのかなあ。

ああ、ついついまた、こんなエントリー書いちゃった僕って短気だなあ><自重します。

追記:竹迫さん曰く

足りないものは苦労じゃ

http://d.hatena.ne.jp/TAKESAKO/20070521/1179743081

そ、その発想はなかった!