Posted at

PHPで関数合成を書いてみる

More than 5 years have passed since last update.

PHP で関数合成 - Qiita [キータ]

こちらの投稿がとても興味深かったので、自分なりに書いてみました。

<?php

class Compose
{
public static function _()
{
$callables = func_get_args();

return array_reduce($callables, function ($a, $b) {
if ($a === null) {
return function () use ($b) {
return call_user_func_array($b, func_get_args());
};
} else {
return function ($arg) use ($a, $b) {
return call_user_func($b, $a($arg));
};
}
});

}
}

$mapUcfirst = function ($arg) {
return array_map('ucfirst', $arg);
};

$splitWithUnderscore = function ($arg) {
return explode('_', $arg);
};

$camelize = Compose::_($splitWithUnderscore, $mapUcfirst, 'join');
var_dump($camelize('man_with_a_mission'));
// ManWithAMission