ウェブサービスを作っています。

PHP でメソッドチェインやイテレータなど

PHP5.3 で遊んでみました。
関数を引数に渡すことができるようになったので、配列ラッパクラスを定義すれば、こんなことができます。

<?php
$ary = new Ary(array(3, 2));
$ary->map(function($v) {
    return $v * 2;
})->each(function($v) {
    echo "{$v}\n";
});

結果

6
4

Ruby なんかと比べればやはり冗長さは否めませんが、前よりは楽しくなっていると思います。


Ary クラスの実装です。

<?php
class Ary
{
    var $ary;

    function __construct($ary = array())
    {
        $this->ary = $ary;
    }

    function map($blk)
    {
        $ary = array();
        $this->each(function($v) use (&$blk, &$ary) {
            $ary[] = $blk($v);
        });
        return new Ary($ary);
    }

    function each($blk)
    {
        foreach ($this->ary as $v) $blk($v);
    }
};