// pipe - применяет функции слева направо
function pipe(mixed $value, callable ...$fns): mixed {
foreach ($fns as $fn) {
$value = $fn($value);
}
return $value;
}
$result = pipe(
' Hello World ',
'trim',
'strtolower',
fn($s) => str_replace(' ', '-', $s),
);
// 'hello-world'
// compose - справа налево (математическая композиция)
function compose(callable ...$fns): Closure {
return function(mixed $value) use ($fns) {
foreach (array_reverse($fns) as $fn) {
$value = $fn($value);
}
return $value;
};
}
$slugify = compose(
fn($s) => str_replace(' ', '-', $s),
'strtolower',
'trim',
);