こちらの投稿がとても興味深かったので、自分なりに書いてみました。
<?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