PHP 8.5.0 RC 2 available for testing

Operadores funcionales

PHP 8.5 y versiones posteriores admiten un operador que funciona directamente con callables. El operador |>, o “pipe”, acepta un callable de un solo parámetro en el lado derecho y le pasa el valor del lado izquierdo, evaluando el resultado del callable. El callable en el lado derecho puede ser cualquier callable válido en PHP: una Closure, un callable de primera clase, un objeto que implemente __invoke(), etc.

Esto significa que las siguientes dos líneas son lógicamente equivalentes.

Ejemplo #1 Usando |>

<?php
$result
= "Hola Mundo" |> strlen(...);
echo
$result, PHP_EOL;

$result = strlen("Hola Mundo");
echo
$result, PHP_EOL;
?>

El ejemplo anterior mostrará :

10
10

Para una única llamada, no resulta especialmente útil. Se vuelve útil cuando se encadenan múltiples llamadas. Es decir, los siguientes dos fragmentos de código son lógicamente equivalentes:

Ejemplo #2 Encadenando llamadas |>

<?php
$result
= "PHP Rocks"
|> htmlentities(...)
|>
str_split(...)
|> (fn(
$x) => array_map(strtoupper(...), $x))
|> (fn(
$x) => array_filter($x, fn($v) => $v != 'O'))
;
echo
$result, PHP_EOL;

$temp = "PHP Rocks";
$temp = htmlentities($temp);
$temp = str_split($temp);
$temp = array_map(strtoupper(...), $temp);
$temp = array_filter($temp, fn($v) => $v != 'O');
$result = $temp;
echo
$result, PHP_EOL;
?>

El ejemplo anterior mostrará :

Array
(
    [0] => P
    [1] => H
    [2] => P
    [3] =>
    [4] => R
    [6] => C
    [7] => K
    [8] => S
)
Array
(
    [0] => P
    [1] => H
    [2] => P
    [3] =>
    [4] => R
    [6] => C
    [7] => K
    [8] => S
)

El lado izquierdo del operador pipe puede ser cualquier valor o expresión. El lado derecho puede ser cualquier callable válido en PHP que acepte un solo parámetro, o cualquier expresión que se evalúe como tal. Las funciones que requieren más de un parámetro no están permitidas y fallarán como si se llamaran normalmente con argumentos insuficientes. Las funciones que reciben variables por referencia tampoco están permitidas. Si el lado derecho no se evalúa como un callable válido, se lanzará un error.

Nota:

Tenga en cuenta que, para evitar ambigüedades de sintaxis, las funciones de flecha DEBEN estar entre paréntesis cuando se utilicen con el operador pipe, como en los ejemplos anteriores. No hacerlo provocará un error fatal.

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top