foreach や array_reduce で同じ変数に複数の関数を適用する

foreach は配列のそれぞれの要素に対して関数を適用することに使われるが、配列にクロージャを格納することで同じ変数に複数の操作を適用できる。array_reduce も同じことができる。

class ApplyMultipleFunctionsTest extends PHPUnit_Framework_TestCase {

    public function testApplyMultipleFunctions() {
        $func['two'] = function($value) { return $value + 2; };
        $func['three'] = function($value) { return $value + 3; };
        $func['four'] = function($value) { return $value + 4; };

        $initial = 1;
        
        $ret = $initial;
        
        foreach ($func as $f) {
            $ret = $f($ret);
        }

        $ret2 = array_reduce($func, function($accum, $f)  { return $f($accum); }, $initial);
        $this->assertEquals(10, $ret);
        $this->assertEquals(10, $ret2);
    }
}