<?php
$double = function ($x) { return 2*$x; };
$cube = function ($x) { return $x*$x*$x; };function compose($f, $g) {
return function ($x) use ($f, $g) {
return $g($f($x));
};
}$func = compose($double, $cube);
echo $func(5);
echo "<br />";
echo $cube($double(5)); // 对应compose调用:先应用第1个函数,后应用第2个函数。
?>
可以知道compose()函数的功能是将两个函数参数复合成一个函数。请将compose()函数改写为支持任意数量的函数复合;只需要支持函数变量作参数,不需要支持函数名字符串的方式。写完请使用以下代码测试,正常应输出65。
$func = compose($double, $cube, function ($var) {return $var+1;});
echo $func(2);

解决方案 »

  1.   

    <?php
    function compose()
    {
        $GLOBALS['funcs']=func_get_args();
        return function ($param){
             foreach($GLOBALS['funcs'] as $func)
                 $param = call_user_func($func, $param); 
             return $param;
        };
    }
      

  2.   

    本帖最后由 xuzuning 于 2012-11-07 07:39:55 编辑