Частичное применение - фиксация части аргументов функции:
function logger(string $level, string $context, string $msg): void {
echo "[$level][$context] $msg\n";
}
// Частичное применение через замыкание
$errorLogger = fn(string $msg) => logger('ERROR', 'app', $msg);
$errorLogger('Something failed');
// Или более гибко
function partial(callable $fn, ...$partial): Closure {
return fn(...$args) => $fn(...$partial, ...$args);
}
$dbLogger = partial('logger', 'INFO', 'database');
$dbLogger('Query executed');Разница с каррированием: partial application фиксирует любое количество аргументов за раз, currying - строго по одному.