PHP 8.6 incorpora Partial Function Application (PFA). La característica se encuentra actualmente en beta. La publicación está prevista alrededor del 19 de noviembre de 2026.
PHP 8.1 introdujo First-Class Callable Syntax. Esta sintaxis convierte una función existente en un callable mediante expresiones como `trim(...)`, también utilizables con `array_map()`. No permite fijar argumentos seleccionados. PFA cubre ese caso con una expresión como `str_replace(' ', '-', ?)`, que crea un callable preparado para recibir después el valor pendiente.
Cada `?` representa exactamente un argumento que llegará en la llamada posterior. Se pueden usar varios marcadores, incluso entre argumentos posicionales o con nombre que ya estén fijados. La sintaxis mantiene un orden concreto: primero aparecen los valores posicionales y los marcadores, después los argumentos con nombre. Solo puede haber un `...` final, y debe ocupar la última posición. La elipsis deja abiertos todos los espacios de argumentos restantes.
PFA resulta útil con funciones que esperan un callable. `array_map()` puede recibir directamente `str_replace('hello', 'hi', ?)` como callback. En el ejemplo con `array_filter()`, `mode: ?` queda pendiente, `is_numeric(...)` fija el callback y `...` reserva el argumento del array para más tarde. El callable puede recibir `0` y `[1, 'a', 2, 'b', 3]` por posición, o `mode: 0` y `array: [1, 'a', 2, 'b', 3]` con nombres.
`...` también permite diferir la ejecución. Un callable creado con `printf('Hello, %s!' . PHP_EOL, ...)` se puede ejecutar cuando haga falta. Con el operador pipe, `str_replace(' ', '-', ?)` recibe el valor producido por la etapa anterior. El mecanismo funciona con métodos estáticos y de instancia. Los ejemplos usan `Book::create(category: Category::THRILLER, title: ?)` y `$book->publish(new DateTimeImmutable(), ...)`.
Los argumentos fijos se evalúan cuando se crea el callable parcial. En el ejemplo con `getPrefix()`, la función muestra `Called!`, devuelve `PHP` y se ejecuta de inmediato. Ese valor queda capturado para llamadas posteriores como `$partial('Alice')` y `$partial('Bob')`. Una closure normal evalúa una expresión como `getPrefix()` cada vez que se invoca.
PFA crea una nueva closure. Los metadatos del callable original no se conservan por completo. Los atributos personalizados, como `#[MyAttribute]`, se pierden. `#[NoDiscard]` y `#[SensitiveParameter]` son excepciones. `#[SensitiveParameter]` se mantiene cuando su parámetro permanece abierto. El código que use Reflection debe tener en cuenta esta diferencia. El artículo también señala que algunas construcciones especiales no son compatibles, pero no las enumera.




Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.